@ryuzaki13/react-foundation-ui 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/advanced-search/index.js +90 -89
- package/dist/advanced-search/index.js.map +1 -1
- package/dist/chunks/{TextEditorLexicalClient-DRhAswpP.js → TextEditorLexicalClient-CovUSRag.js} +2 -2
- package/dist/chunks/{TextEditorLexicalClient-DRhAswpP.js.map → TextEditorLexicalClient-CovUSRag.js.map} +1 -1
- package/dist/chunks/{modal-B3HY3laL.js → modal-ByNRME3b.js} +3 -3
- package/dist/chunks/{modal-B3HY3laL.js.map → modal-ByNRME3b.js.map} +1 -1
- package/dist/chunks/multi-select-BYsbh2ca.js +126 -0
- package/dist/chunks/multi-select-BYsbh2ca.js.map +1 -0
- package/dist/chunks/{multi-select-BzYIviCU.js → odata-DSW7z3nh.js} +373 -569
- package/dist/chunks/odata-DSW7z3nh.js.map +1 -0
- package/dist/chunks/select-BT65bQ8J.js +81 -0
- package/dist/chunks/select-BT65bQ8J.js.map +1 -0
- package/dist/chunks/useODataSelectBase-BbeKdq6x.js +125 -0
- package/dist/chunks/useODataSelectBase-BbeKdq6x.js.map +1 -0
- package/dist/image/index.js +1 -1
- package/dist/modal/ModalManagerProvider.d.ts.map +1 -1
- package/dist/modal/index.js +1 -1
- package/dist/modal/stories/Modal.stories.js +1 -1
- package/dist/modal/types.d.ts +1 -0
- package/dist/modal/types.d.ts.map +1 -1
- package/dist/multi-select/index.js +3 -3
- package/dist/select/index.d.ts +1 -0
- package/dist/select/index.d.ts.map +1 -1
- package/dist/select/index.js +3 -2
- package/dist/styles.css +1 -1
- package/dist/text-editor/index.js +1 -1
- package/dist/tree-select/index.d.ts +2 -0
- package/dist/tree-select/index.d.ts.map +1 -1
- package/dist/tree-select/index.js +173 -4
- package/dist/tree-select/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/multi-select-BzYIviCU.js.map +0 -1
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { a as e, r as t } from "./odata-DSW7z3nh.js";
|
|
2
|
+
import { t as n } from "./MultiSelect-D1XYuwH1.js";
|
|
3
|
+
import { n as r, t as i } from "./useODataSelectBase-BbeKdq6x.js";
|
|
4
|
+
import { useCallback as a, useState as o } from "react";
|
|
5
|
+
import { jsx as s } from "react/jsx-runtime";
|
|
6
|
+
//#region src/multi-select/model/useODataMultiSelect.ts
|
|
7
|
+
function c({ odata: e, segment: t, model: n, value: a, dependencies: o, onChange: s }) {
|
|
8
|
+
let c = r({
|
|
9
|
+
odata: e,
|
|
10
|
+
segment: t,
|
|
11
|
+
model: n,
|
|
12
|
+
value: a,
|
|
13
|
+
dependencies: o
|
|
14
|
+
}), l = (e) => {
|
|
15
|
+
s(i(e, c.selectionKey));
|
|
16
|
+
};
|
|
17
|
+
return {
|
|
18
|
+
...c,
|
|
19
|
+
handleChange: l
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/multi-select/ui/ODataMultiSelect.tsx
|
|
24
|
+
var l = ({ odata: t, segment: r, model: i, label: a, description: o, disabled: l, value: u, dependencies: d, onChange: f, size: p }) => {
|
|
25
|
+
let m = c({
|
|
26
|
+
odata: t,
|
|
27
|
+
segment: r,
|
|
28
|
+
model: e(i),
|
|
29
|
+
value: u,
|
|
30
|
+
dependencies: d,
|
|
31
|
+
onChange: f
|
|
32
|
+
});
|
|
33
|
+
return /* @__PURE__ */ s(n, {
|
|
34
|
+
label: a,
|
|
35
|
+
description: o,
|
|
36
|
+
size: p,
|
|
37
|
+
codeKey: m.codeKey,
|
|
38
|
+
textKey: m.textKey,
|
|
39
|
+
hideCode: r.hideCode ?? t.hideCode,
|
|
40
|
+
items: m.filteredItems,
|
|
41
|
+
value: m.selectedItems,
|
|
42
|
+
onChange: m.handleChange,
|
|
43
|
+
onQuery: m.setQuery,
|
|
44
|
+
query: m.query,
|
|
45
|
+
defaultFilter: !1,
|
|
46
|
+
highlightQuery: m.debouncedQuery,
|
|
47
|
+
disabled: l || m.isLoading,
|
|
48
|
+
placeholder: m.placeholder,
|
|
49
|
+
error: m.isError ? "Ошибка загрузки" : void 0
|
|
50
|
+
});
|
|
51
|
+
}, u = ({ item: e, values: t, onChange: n, width: r = 15 }) => {
|
|
52
|
+
let [i, c] = o({}), u = t ?? i, d = `calc(${r}em + var(--width-add))`, f = a((r) => {
|
|
53
|
+
let i = {
|
|
54
|
+
...u,
|
|
55
|
+
[e.id]: r
|
|
56
|
+
};
|
|
57
|
+
t || c(i), n?.(i);
|
|
58
|
+
}, [
|
|
59
|
+
e.id,
|
|
60
|
+
n,
|
|
61
|
+
u,
|
|
62
|
+
t
|
|
63
|
+
]);
|
|
64
|
+
return /* @__PURE__ */ s("div", {
|
|
65
|
+
style: {
|
|
66
|
+
maxWidth: d,
|
|
67
|
+
minWidth: d
|
|
68
|
+
},
|
|
69
|
+
children: /* @__PURE__ */ s(l, {
|
|
70
|
+
odata: e.odata,
|
|
71
|
+
segment: e.segment,
|
|
72
|
+
model: e.model,
|
|
73
|
+
dependencies: u,
|
|
74
|
+
value: u[e.id],
|
|
75
|
+
onChange: f
|
|
76
|
+
})
|
|
77
|
+
});
|
|
78
|
+
}, d = ({ width: e = 15, odata: n, segments: r, model: i, values: a, onChange: c }) => {
|
|
79
|
+
let [l, d] = o({}), f = a ?? l;
|
|
80
|
+
return t([{
|
|
81
|
+
odata: n,
|
|
82
|
+
segments: r,
|
|
83
|
+
model: i
|
|
84
|
+
}]).map((t) => /* @__PURE__ */ s(u, {
|
|
85
|
+
item: t,
|
|
86
|
+
values: f,
|
|
87
|
+
onChange: (e) => {
|
|
88
|
+
a || d(e), c?.(e);
|
|
89
|
+
},
|
|
90
|
+
width: e
|
|
91
|
+
}, t.id));
|
|
92
|
+
};
|
|
93
|
+
//#endregion
|
|
94
|
+
//#region src/multi-select/ui/SerializableMultiSelect.tsx
|
|
95
|
+
function f(e, t) {
|
|
96
|
+
return e[t];
|
|
97
|
+
}
|
|
98
|
+
function p(e, t, n) {
|
|
99
|
+
let r = e[t];
|
|
100
|
+
if (typeof r == "string") return r;
|
|
101
|
+
let i = f(e, n);
|
|
102
|
+
return typeof i == "string" ? i : String(i);
|
|
103
|
+
}
|
|
104
|
+
function m({ label: e, description: t, disabled: r, placeholder: i, size: a, options: o, value: c, onChange: l, optionKey: u, optionLabel: d, renderCode: m }) {
|
|
105
|
+
let h = o.map((e) => ({
|
|
106
|
+
key: String(f(e, u)),
|
|
107
|
+
text: p(e, d, u)
|
|
108
|
+
})), g = new Set((c ?? []).map((e) => String(e))), _ = h.filter((e) => g.has(e.key));
|
|
109
|
+
return /* @__PURE__ */ s(n, {
|
|
110
|
+
label: e,
|
|
111
|
+
description: t,
|
|
112
|
+
disabled: r,
|
|
113
|
+
placeholder: i,
|
|
114
|
+
size: a,
|
|
115
|
+
items: h,
|
|
116
|
+
codeKey: "key",
|
|
117
|
+
textKey: "text",
|
|
118
|
+
hideCode: m ? void 0 : !0,
|
|
119
|
+
value: _,
|
|
120
|
+
onChange: (e) => l(e.map((e) => e.key))
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//#endregion
|
|
124
|
+
export { l as i, d as n, u as r, m as t };
|
|
125
|
+
|
|
126
|
+
//# sourceMappingURL=multi-select-BYsbh2ca.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-select-BYsbh2ca.js","names":[],"sources":["../../src/multi-select/model/useODataMultiSelect.ts","../../src/multi-select/ui/ODataMultiSelect.tsx","../../src/multi-select/ui/ODataDependentSegmentMultiSelect.tsx","../../src/multi-select/ui/ODataDependentMultiSelect.tsx","../../src/multi-select/ui/SerializableMultiSelect.tsx"],"sourcesContent":["import { ODataCollectionModel, ODataSelectBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\nimport { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\nimport { mapSelectedItemsToValues, useODataSelectBase } from \"../../select/model/useODataSelectBase\";\n\ninterface UseODataMultiSelectOptions extends Omit<ODataSelectBaseProps, \"model\"> {\n\tmodel: Required<ODataCollectionModel>;\n\tonChange: (keys: string[]) => void;\n}\n\nexport function useODataMultiSelect({ odata, segment, model, value, dependencies, onChange }: UseODataMultiSelectOptions) {\n\tconst odataModel = useODataSelectBase({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue,\n\t\tdependencies\n\t});\n\n\tconst handleChange = (items: CollectionItem[]) => {\n\t\tonChange(mapSelectedItemsToValues(items, odataModel.selectionKey));\n\t};\n\n\treturn {\n\t\t...odataModel,\n\t\thandleChange\n\t};\n}\n","import React from \"react\";\n\nimport { ODataSelectBaseProps, useODataCollectionModel } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { UiBaseProps } from \"../../types\";\nimport { useODataMultiSelect } from \"../model/useODataMultiSelect\";\n\nimport { MultiSelect } from \"./MultiSelect\";\n\ntype ODataMultiSelectProps = ODataSelectBaseProps & Omit<UiBaseProps<string[]>, \"placeholder\"> & {};\n\nexport const ODataMultiSelect: React.FC<ODataMultiSelectProps> = ({\n\todata,\n\tsegment,\n\tmodel: initialModel,\n\tlabel,\n\tdescription,\n\tdisabled,\n\tvalue,\n\tdependencies,\n\tonChange,\n\tsize\n}) => {\n\tconst model = useODataCollectionModel(initialModel);\n\tconst odataModel = useODataMultiSelect({\n\t\todata,\n\t\tsegment,\n\t\tmodel,\n\t\tvalue,\n\t\tdependencies,\n\t\tonChange\n\t});\n\n\treturn (\n\t\t<MultiSelect\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tsize={size}\n\t\t\tcodeKey={odataModel.codeKey}\n\t\t\ttextKey={odataModel.textKey}\n\t\t\thideCode={segment.hideCode ?? odata.hideCode}\n\t\t\titems={odataModel.filteredItems}\n\t\t\tvalue={odataModel.selectedItems}\n\t\t\tonChange={odataModel.handleChange}\n\t\t\tonQuery={odataModel.setQuery}\n\t\t\tquery={odataModel.query}\n\t\t\tdefaultFilter={false}\n\t\t\thighlightQuery={odataModel.debouncedQuery}\n\t\t\tdisabled={disabled || odataModel.isLoading}\n\t\t\tplaceholder={odataModel.placeholder}\n\t\t\terror={odataModel.isError ? \"Ошибка загрузки\" : undefined}\n\t\t/>\n\t);\n};\n","import { useCallback, useState } from \"react\";\n\nimport { ODataMultiSelect } from \"./ODataMultiSelect\";\n\nimport type { ODataDependentSegmentItem } from \"@ryuzaki13/react-foundation-api/odata\";\n\ninterface ODataDependentSegmentMultiSelectProps {\n\titem: ODataDependentSegmentItem;\n\t/**\n\t * Выбранные значения (управляемый компонент)\n\t */\n\tvalues?: Record<string, string[]>;\n\t/**\n\t * Обработчик изменения выбранных значений\n\t */\n\tonChange?: (selected: Record<string, string[]>) => void;\n\t/**\n\t * Ширина одного элемента в `em` единицах.\n\t *\n\t * @default 15\n\t */\n\twidth?: number;\n}\n\nexport const ODataDependentSegmentMultiSelect: React.FC<ODataDependentSegmentMultiSelectProps> = ({\n\titem,\n\tvalues,\n\tonChange,\n\twidth = 15\n}) => {\n\tconst [internalSelectedValues, setInternalSelectedValues] = useState<Record<string, string[]>>({});\n\tconst selectedValues = values ?? internalSelectedValues;\n\tconst widthStyle = `calc(${width}em + var(--width-add))`;\n\n\tconst handleSelectionChange = useCallback(\n\t\t(keys: string[]) => {\n\t\t\tconst nextSelectedValues = {\n\t\t\t\t...selectedValues,\n\t\t\t\t[item.id]: keys\n\t\t\t};\n\n\t\t\tif (!values) {\n\t\t\t\tsetInternalSelectedValues(nextSelectedValues);\n\t\t\t}\n\n\t\t\tonChange?.(nextSelectedValues);\n\t\t},\n\t\t[item.id, onChange, selectedValues, values]\n\t);\n\n\treturn (\n\t\t<div style={{ maxWidth: widthStyle, minWidth: widthStyle }}>\n\t\t\t<ODataMultiSelect\n\t\t\t\todata={item.odata}\n\t\t\t\tsegment={item.segment}\n\t\t\t\tmodel={item.model}\n\t\t\t\tdependencies={selectedValues}\n\t\t\t\tvalue={selectedValues[item.id]}\n\t\t\t\tonChange={handleSelectionChange}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","import { useState } from \"react\";\n\nimport { flattenODataDependentServices, ODataDependentBaseProps } from \"@ryuzaki13/react-foundation-api/odata\";\n\nimport { ODataDependentSegmentMultiSelect } from \"./ODataDependentSegmentMultiSelect\";\n\ninterface ODataDependentMultiSelectProps extends ODataDependentBaseProps {\n\t/**\n\t * Выбранные значения (управляемый компонент)\n\t */\n\tvalues?: Record<string, string[]>;\n\n\t/**\n\t * Обработчик изменения выбранных значений\n\t */\n\tonChange?: (selected: Record<string, string[]>) => void;\n\n\t/**\n\t * Ширина одного элемента в `em` единицах.\n\t *\n\t * @default 15\n\t */\n\twidth?: number;\n}\n\nexport const ODataDependentMultiSelect: React.FC<ODataDependentMultiSelectProps> = ({\n\twidth = 15,\n\todata,\n\tsegments,\n\tmodel,\n\tvalues,\n\tonChange\n}) => {\n\tconst [internalSelectedValues, setInternalSelectedValues] = useState<Record<string, string[]>>({});\n\tconst selectedValues = values ?? internalSelectedValues;\n\tconst items = flattenODataDependentServices([\n\t\t{\n\t\t\todata,\n\t\t\tsegments,\n\t\t\tmodel\n\t\t}\n\t]);\n\n\treturn items.map((item) => (\n\t\t<ODataDependentSegmentMultiSelect\n\t\t\tkey={item.id}\n\t\t\titem={item}\n\t\t\tvalues={selectedValues}\n\t\t\tonChange={(nextSelectedValues) => {\n\t\t\t\tif (!values) {\n\t\t\t\t\tsetInternalSelectedValues(nextSelectedValues);\n\t\t\t\t}\n\n\t\t\t\tonChange?.(nextSelectedValues);\n\t\t\t}}\n\t\t\twidth={width}\n\t\t/>\n\t));\n};\n","import { MultiSelect } from \"./MultiSelect\";\n\nimport type { UiBaseProps } from \"../../types\";\nimport type { CollectionItem } from \"@ryuzaki13/react-foundation-lib/odata\";\n\ntype SerializableOptionRecord = Record<string, unknown>;\n\ntype SerializableOptionKeyField<TOption extends SerializableOptionRecord> = {\n\t[K in keyof TOption]: Extract<TOption[K], string> extends never ? never : K;\n}[keyof TOption];\n\nexport interface SerializableMultiSelectProps<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n> extends UiBaseProps<Extract<TOption[TOptionKey], string>[]> {\n\toptions: readonly TOption[];\n\toptionKey: TOptionKey;\n\toptionLabel: TOptionLabel;\n\trenderCode?: true;\n}\n\nfunction getSerializableOptionKey<TOption extends SerializableOptionRecord, TOptionKey extends SerializableOptionKeyField<TOption>>(\n\toption: TOption,\n\toptionKey: TOptionKey\n): Extract<TOption[TOptionKey], string> {\n\treturn option[optionKey] as Extract<TOption[TOptionKey], string>;\n}\n\nfunction getSerializableOptionLabel<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>(option: TOption, optionLabel: TOptionLabel, optionKey: TOptionKey): string {\n\tconst label = option[optionLabel];\n\n\tif (typeof label === \"string\") {\n\t\treturn label;\n\t}\n\n\tconst key = getSerializableOptionKey(option, optionKey);\n\treturn typeof key === \"string\" ? key : String(key);\n}\n\nexport function SerializableMultiSelect<\n\tTOption extends SerializableOptionRecord,\n\tTOptionKey extends SerializableOptionKeyField<TOption>,\n\tTOptionLabel extends keyof TOption\n>({\n\tlabel,\n\tdescription,\n\tdisabled,\n\tplaceholder,\n\tsize,\n\toptions,\n\tvalue,\n\tonChange,\n\toptionKey,\n\toptionLabel,\n\trenderCode\n}: SerializableMultiSelectProps<TOption, TOptionKey, TOptionLabel>) {\n\t// Как будто можно не мемоизировать, нет смысла\n\tconst items = options.map<CollectionItem>((option) => ({\n\t\tkey: String(getSerializableOptionKey(option, optionKey)),\n\t\ttext: getSerializableOptionLabel(option, optionLabel, optionKey)\n\t}));\n\tconst selectedKeys = new Set((value ?? []).map((item) => String(item)));\n\tconst selectedItems = items.filter((item) => selectedKeys.has(item.key));\n\n\treturn (\n\t\t<MultiSelect\n\t\t\tlabel={label}\n\t\t\tdescription={description}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t\tsize={size}\n\t\t\titems={items}\n\t\t\tcodeKey=\"key\"\n\t\t\ttextKey=\"text\"\n\t\t\thideCode={renderCode ? undefined : true}\n\t\t\tvalue={selectedItems}\n\t\t\tonChange={(nextItems) => onChange(nextItems.map((item) => item.key) as Extract<TOption[TOptionKey], string>[])}\n\t\t/>\n\t);\n}\n"],"mappings":"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"}
|