haya-select 1.0.74 → 1.0.76
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/build/config.d.ts +1 -10
- package/build/config.d.ts.map +1 -1
- package/build/config.js +18 -7
- package/build/config.js.map +1 -1
- package/build/select/index.js +18 -18
- package/build/select/index.js.map +1 -1
- package/package.json +1 -1
- package/src/config.js +22 -7
- package/src/select/index.jsx +19 -19
- package/link.sh +0 -8
package/build/config.d.ts
CHANGED
|
@@ -1,11 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
declare const configuration: HayaSelectConfiguration;
|
|
3
|
-
declare class HayaSelectConfiguration {
|
|
4
|
-
_translate: (msgID: any) => any;
|
|
5
|
-
getBodyPortal(): any;
|
|
6
|
-
getTranslate(): (msgID: any) => any;
|
|
7
|
-
setBodyPortal(newBodyPortal: any): void;
|
|
8
|
-
_bodyPortal: any;
|
|
9
|
-
setTranslate(callback: any): void;
|
|
10
|
-
}
|
|
1
|
+
export {};
|
|
11
2
|
//# sourceMappingURL=config.d.ts.map
|
package/build/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.js"],"names":[],"mappings":""}
|
package/build/config.js
CHANGED
|
@@ -1,20 +1,31 @@
|
|
|
1
|
+
const shared = {};
|
|
2
|
+
const t = (msgID) => {
|
|
3
|
+
if (!shared._translateWarning) {
|
|
4
|
+
shared._translateWarning = true;
|
|
5
|
+
console.log("HayaSelect: Translate method not set");
|
|
6
|
+
}
|
|
7
|
+
return msgID;
|
|
8
|
+
};
|
|
9
|
+
const useTranslateFallback = () => ({ t });
|
|
1
10
|
class HayaSelectConfiguration {
|
|
2
|
-
|
|
11
|
+
_useTranslate = useTranslateFallback;
|
|
3
12
|
getBodyPortal() {
|
|
4
13
|
if (!this._bodyPortal)
|
|
5
14
|
throw new Error("bodyPortal wasn't set");
|
|
6
15
|
return this._bodyPortal;
|
|
7
16
|
}
|
|
8
|
-
|
|
9
|
-
return this.
|
|
17
|
+
getUseTranslate() {
|
|
18
|
+
return this._useTranslate;
|
|
10
19
|
}
|
|
11
20
|
setBodyPortal(newBodyPortal) {
|
|
12
21
|
this._bodyPortal = newBodyPortal;
|
|
13
22
|
}
|
|
14
|
-
|
|
15
|
-
this.
|
|
23
|
+
setUseTranslate(callback) {
|
|
24
|
+
this._useTranslate = callback;
|
|
16
25
|
}
|
|
17
26
|
}
|
|
18
|
-
|
|
19
|
-
|
|
27
|
+
if (!globalThis.hayaSelectConfig) {
|
|
28
|
+
globalThis.hayaSelectConfig = new HayaSelectConfiguration();
|
|
29
|
+
}
|
|
30
|
+
export default globalThis.hayaSelectConfig;
|
|
20
31
|
//# sourceMappingURL=config.js.map
|
package/build/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.js"],"names":[],"mappings":"AAAA,MAAM,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.js"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,EAAE,CAAA;AAEjB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE;IAClB,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC9B,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAA;QAC/B,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;IACrD,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAA;AAExC,MAAM,uBAAuB;IAC3B,aAAa,GAAG,oBAAoB,CAAA;IAEpC,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAE/D,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAED,aAAa,CAAC,aAAa;QACzB,IAAI,CAAC,WAAW,GAAG,aAAa,CAAA;IAClC,CAAC;IAED,eAAe,CAAC,QAAQ;QACtB,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;IAC/B,CAAC;CACF;AAED,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;IACjC,UAAU,CAAC,gBAAgB,GAAG,IAAI,uBAAuB,EAAE,CAAA;AAC7D,CAAC;AAED,eAAe,UAAU,CAAC,gBAAgB,CAAA","sourcesContent":["const shared = {}\n\nconst t = (msgID) => {\n if (!shared._translateWarning) {\n shared._translateWarning = true\n console.log(\"HayaSelect: Translate method not set\")\n }\n\n return msgID\n}\n\nconst useTranslateFallback = () => ({t})\n\nclass HayaSelectConfiguration {\n _useTranslate = useTranslateFallback\n\n getBodyPortal() {\n if (!this._bodyPortal) throw new Error(\"bodyPortal wasn't set\")\n\n return this._bodyPortal\n }\n\n getUseTranslate() {\n return this._useTranslate\n }\n\n setBodyPortal(newBodyPortal) {\n this._bodyPortal = newBodyPortal\n }\n\n setUseTranslate(callback) {\n this._useTranslate = callback\n }\n}\n\nif (!globalThis.hayaSelectConfig) {\n globalThis.hayaSelectConfig = new HayaSelectConfiguration()\n}\n\nexport default globalThis.hayaSelectConfig\n"]}
|
package/build/select/index.js
CHANGED
|
@@ -23,14 +23,6 @@ const nameForComponentWithMultiple = (component) => {
|
|
|
23
23
|
}
|
|
24
24
|
return name;
|
|
25
25
|
};
|
|
26
|
-
const t = (msgID) => {
|
|
27
|
-
if (msgID.startsWith(".")) {
|
|
28
|
-
return config.getTranslate()(`haya_select${msgID}`);
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
return config.getTranslate()(msgID);
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
26
|
export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
35
27
|
static defaultProps = {
|
|
36
28
|
multiple: false,
|
|
@@ -78,6 +70,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
78
70
|
windowWidth = Dimensions.get("window").width;
|
|
79
71
|
windowHeight = Dimensions.get("window").height;
|
|
80
72
|
setup() {
|
|
73
|
+
const { t } = config.getUseTranslate()();
|
|
81
74
|
if (this.props.values) {
|
|
82
75
|
for (const value of this.props.values) {
|
|
83
76
|
if (typeof value == "undefined") {
|
|
@@ -89,7 +82,8 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
89
82
|
endOfSelectRef: useRef(),
|
|
90
83
|
optionsContainerRef: useRef(),
|
|
91
84
|
searchTextInputRef: useRef(),
|
|
92
|
-
selectContainerRef: useRef()
|
|
85
|
+
selectContainerRef: useRef(),
|
|
86
|
+
t
|
|
93
87
|
});
|
|
94
88
|
this.useStates({
|
|
95
89
|
currentOptions: () => this.defaultCurrentOptions(),
|
|
@@ -127,6 +121,14 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
127
121
|
}
|
|
128
122
|
}, [this.props.values]);
|
|
129
123
|
}
|
|
124
|
+
translate(msgID) {
|
|
125
|
+
if (msgID.startsWith(".")) {
|
|
126
|
+
return this.t(`haya_select${msgID}`);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
return this.t(msgID);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
130
132
|
defaultCurrentOptions() {
|
|
131
133
|
const { defaultValue, defaultValues, values } = this.props;
|
|
132
134
|
const { options } = this.p;
|
|
@@ -217,7 +219,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
217
219
|
paddingTop: 5,
|
|
218
220
|
paddingBottom: 5,
|
|
219
221
|
paddingLeft: 5
|
|
220
|
-
});
|
|
222
|
+
}, [transparent]);
|
|
221
223
|
if (opened) {
|
|
222
224
|
// Prevent select from changing size once the content is replaced with search text once opened
|
|
223
225
|
selectContainerStyleActual.height = this.s.height;
|
|
@@ -247,7 +249,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
247
249
|
React.createElement(Pressable, { dataSet: this.selectContainerDataSet ||= { class: "select-container" }, onLayout: this.tt.onSelectContainerLayout, onPress: this.tt.onSelectClicked, ref: this.tt.selectContainerRef, style: selectContainerStyleActual },
|
|
248
250
|
React.createElement(View, { dataSet: this.currentSelectedDataSet ||= { class: "current-selected" }, style: this.stylingFor("currentSelected", this.currentSelectedStyle ||= { width: "calc(100% - 25px)", flexWrap: "wrap", overflow: "hidden" }) },
|
|
249
251
|
opened &&
|
|
250
|
-
React.createElement(TextInput, { dataSet: this.searchTextInputDataSet ||= { class: "search-text-input" }, onChange: this.tt.onSearchTextInputChangedDebounced, onChangeText: this.tt.onChangeSearchText, placeholder:
|
|
252
|
+
React.createElement(TextInput, { dataSet: this.searchTextInputDataSet ||= { class: "search-text-input" }, onChange: this.tt.onSearchTextInputChangedDebounced, onChangeText: this.tt.onChangeSearchText, placeholder: this.translate(".search_dot_dot_dot"), ref: this.tt.searchTextInputRef, style: this.stylingFor("searchTextInput", this.searchTextInputStyle ||= {
|
|
251
253
|
width: "100%",
|
|
252
254
|
border: 0,
|
|
253
255
|
outline: "none",
|
|
@@ -256,7 +258,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
256
258
|
!opened &&
|
|
257
259
|
React.createElement(React.Fragment, null,
|
|
258
260
|
currentOptions.length == 0 &&
|
|
259
|
-
React.createElement(Text, { numberOfLines: 1, style: this.stylingFor("nothingSelected", this.nothingSelectedStyle ||= { color: "grey" }) }, placeholder ||
|
|
261
|
+
React.createElement(Text, { numberOfLines: 1, style: this.stylingFor("nothingSelected", this.nothingSelectedStyle ||= { color: "grey" }) }, placeholder || this.translate(".nothing_selected")),
|
|
260
262
|
currentOptions.length == 0 && Platform.OS == "web" &&
|
|
261
263
|
React.createElement("input", { id: idForComponent(this), name: nameForComponentWithMultiple(this), type: "hidden", value: "" }),
|
|
262
264
|
currentOptions.map((currentOption) => React.createElement(View, { dataSet: this.currentOptionDataSet ||= { class: "current-option" }, key: currentOption.key || `current-value-${currentOption.value}`, style: this.stylingFor("currentOption", { marginRight: 6 }) },
|
|
@@ -448,8 +450,6 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
448
450
|
let left, top;
|
|
449
451
|
let style = {
|
|
450
452
|
position: "absolute",
|
|
451
|
-
zIndex: 99999,
|
|
452
|
-
elevation: 99999,
|
|
453
453
|
visibility: optionsVisibility,
|
|
454
454
|
width: this.p.optionsWidth || this.s.optionsWidth,
|
|
455
455
|
backgroundColor: "#fff",
|
|
@@ -496,7 +496,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
496
496
|
else {
|
|
497
497
|
throw new Error(`Unkonwn options placement: ${optionsPlacement}`);
|
|
498
498
|
}
|
|
499
|
-
style = this.stylingFor("optionsContainer", style);
|
|
499
|
+
style = this.stylingFor("optionsContainer", style, [left, top, style.visibility, style.width]);
|
|
500
500
|
const id = idForComponent(this);
|
|
501
501
|
return (React.createElement(View, { dataSet: this.cache("optionsContainerDataSet", { class: "options-container", id, role: "dialog" }, [id]), onLayout: this.tt.onOptionsContainerLayout, ref: this.tt.optionsContainerRef, style: style },
|
|
502
502
|
loadedOptions?.map((loadedOption) => this.hayaSelectOption({
|
|
@@ -505,7 +505,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
505
505
|
})),
|
|
506
506
|
loadedOptions?.length === 0 &&
|
|
507
507
|
React.createElement(View, { dataSet: this.noOptionsContainerDataSet ||= { class: "no-options-container" } },
|
|
508
|
-
React.createElement(Text, null,
|
|
508
|
+
React.createElement(Text, null, this.translate(".no_options_found")))));
|
|
509
509
|
}
|
|
510
510
|
onOptionClicked = (event, loadedOption) => {
|
|
511
511
|
event.preventDefault();
|
|
@@ -582,14 +582,14 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
582
582
|
this.closeOptions();
|
|
583
583
|
this.setState(newState);
|
|
584
584
|
};
|
|
585
|
-
stylingFor(stylingName, style = {}) {
|
|
585
|
+
stylingFor(stylingName, style = {}, caches = []) {
|
|
586
586
|
let customStyling = dig(this, "props", "styles", stylingName);
|
|
587
587
|
if (typeof customStyling == "function")
|
|
588
588
|
customStyling = customStyling({ state: this.state, style });
|
|
589
589
|
if (customStyling) {
|
|
590
590
|
return Object.assign(style, customStyling);
|
|
591
591
|
}
|
|
592
|
-
return style;
|
|
592
|
+
return this.cache(`stylingFor-${stylingName}`, style, caches);
|
|
593
593
|
}
|
|
594
594
|
iconForOption(option) {
|
|
595
595
|
const { toggleOptions } = this.props || {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/select/index.jsx"],"names":[],"mappings":"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","sourcesContent":["import {anythingDifferent} from \"set-state-compare/src/diff-utils\"\nimport config from \"../config.js\"\nimport {dig, digg} from \"diggerize\"\nimport {Dimensions, Platform, Pressable, Text, TextInput, View} from \"react-native\"\nimport React, {memo, useEffect, useRef} from \"react\"\nimport {shapeComponent, ShapeComponent} from \"set-state-compare/src/shape-component.js\"\nimport debounce from \"debounce\"\nimport FontAwesomeIcon from \"react-native-vector-icons/FontAwesome\"\nimport idForComponent from \"@kaspernj/api-maker/build/inputs/id-for-component\"\nimport nameForComponent from \"@kaspernj/api-maker/build/inputs/name-for-component\"\nimport Option from \"./option\"\nimport OptionGroup from \"./option-group\"\nimport PropTypes from \"prop-types\"\nimport propTypesExact from \"prop-types-exact\"\nimport RenderHtml from \"react-native-render-html\"\nimport {Portal} from \"conjointment\"\nimport useEventListener from \"@kaspernj/api-maker/build/use-event-listener\"\n\nconst nameForComponentWithMultiple = (component) => {\n let name = nameForComponent(component)\n\n const currentOptions = component.getCurrentOptions()\n\n if (component.props.multiple && name && currentOptions.length > 0) {\n name += \"[]\"\n }\n\n return name\n}\n\n\nconst t = (msgID) => {\n if (msgID.startsWith(\".\")) {\n return config.getTranslate()(`haya_select${msgID}`)\n } else {\n return config.getTranslate()(msgID)\n }\n}\n\nexport default memo(shapeComponent(class HayaSelect extends ShapeComponent {\n static defaultProps = {\n multiple: false,\n onBlur: null,\n onFocus: null,\n optionsAbsolute: true,\n optionsPortal: true,\n optionsWidth: null,\n search: false,\n transparent: false\n }\n\n static propTypes = propTypesExact({\n attribute: PropTypes.string,\n className: PropTypes.string,\n defaultToggled: PropTypes.object,\n defaultValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n defaultValues: PropTypes.array,\n defaultValuesFromOptions: PropTypes.array,\n id: PropTypes.node,\n model: PropTypes.object,\n multiple: PropTypes.bool.isRequired,\n name: PropTypes.string,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n onChangeValue: PropTypes.func,\n onFocus: PropTypes.func,\n onOptionsClosed: PropTypes.func,\n options: PropTypes.oneOfType([PropTypes.array, PropTypes.func]).isRequired,\n optionsAbsolute: PropTypes.bool.isRequired,\n optionsPortal: PropTypes.bool.isRequired,\n optionsWidth: PropTypes.number,\n placeholder: PropTypes.node,\n search: PropTypes.bool.isRequired,\n styles: PropTypes.object,\n toggled: PropTypes.object,\n toggleOptions: PropTypes.arrayOf(PropTypes.shape({\n icon: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired\n })),\n transparent: PropTypes.bool.isRequired,\n values: PropTypes.array\n })\n\n callOptionsPositionAboveIfOutsideScreen = false\n windowWidth = Dimensions.get(\"window\").width\n windowHeight = Dimensions.get(\"window\").height\n\n setup() {\n if (this.props.values) {\n for (const value of this.props.values) {\n if (typeof value == \"undefined\") {\n throw new Error(\"HayaSelect: Undefined given as value\")\n }\n }\n }\n\n this.setInstance({\n endOfSelectRef: useRef(),\n optionsContainerRef: useRef(),\n searchTextInputRef: useRef(),\n selectContainerRef: useRef()\n })\n this.useStates({\n currentOptions: () => this.defaultCurrentOptions(),\n selectContainerLayout: null,\n endOfSelectLayout: null,\n height: null,\n loadedOptions: () => this.defaultLoadedOptions(),\n opened: false,\n optionsContainerLayout: null,\n optionsPlacement: undefined,\n optionsTop: undefined,\n optionsVisibility: undefined,\n optionsWidth: undefined,\n scrollLeft: Platform.OS == \"web\" ? document.documentElement.scrollLeft : null,\n scrollTop: Platform.OS == \"web\" ? document.documentElement.scrollTop : null,\n searchText: \"\",\n toggled: () => this.defaultToggled()\n })\n\n useEventListener(Dimensions, \"change\", this.tt.onDimensionsChange)\n\n if (Platform.OS == \"web\") {\n useEventListener(window, \"click\", this.tt.onWindowClicked)\n useEventListener(window, \"resize\", this.tt.onAnythingResizedDebounced)\n useEventListener(window, \"scroll\", this.tt.onAnythingScrolledDebounced)\n }\n\n useEffect(() => {\n if (this.tt.callOptionsPositionAboveIfOutsideScreen && this.s.optionsContainerLayout) {\n this.callOptionsPositionAboveIfOutsideScreen = false\n this.setOptionsPositionAboveIfOutsideScreen()\n }\n }, [this.tt.callOptionsPositionAboveIfOutsideScreen, this.s.optionsContainerLayout])\n\n useEffect(() => {\n const currentOptionIds = this.s.currentOptions?.map((currentOption) => currentOption.value)\n\n if (this.props.values && anythingDifferent(currentOptionIds, this.props.values) && typeof this.props.options == \"function\") {\n this.setCurrentFromGivenValues()\n }\n }, [this.props.values])\n }\n\n defaultCurrentOptions() {\n const {defaultValue, defaultValues, values} = this.props\n const {options} = this.p\n\n if (!Array.isArray(options)) return []\n\n return options.filter(({value}) =>\n (defaultValue && value == defaultValue) ||\n (defaultValues && defaultValues.includes(value)) ||\n (values && values.includes(value))\n )\n }\n\n defaultLoadedOptions() {\n const {options} = this.p\n\n if (typeof options == \"function\") {\n return undefined\n } else if (Array.isArray(options)) {\n return options\n }\n\n throw new Error(`Unknown type of options: ${typeof options}`)\n }\n\n defaultToggled = () => (\"toggled\" in this.props) ? this.p.toggled : this.props.defaultToggled || {}\n getToggled = () => (\"toggled\" in this.props) ? this.p.toggled : this.s.toggled\n getValues = () => (\"values\" in this.props) ? this.p.values : this.s.currentOptions.map((currentOption) => currentOption.value)\n getCurrentOptions = () => {\n if (\"values\" in this.props && typeof this.props.values != \"undefined\") {\n if (Array.isArray(this.props.options) && this.props.values) {\n return this.p.values.map((value) => this.p.options.find((option) => option.value == value))\n } else if (this.s.loadedOptions && this.props.values) {\n return this.p.values.map((value) => {\n let foundOption = this.s.loadedOptions.find((option) => option.value == value)\n\n if (!foundOption) {\n foundOption = this.s.currentOptions.find((option) => option.value == value)\n\n if (!foundOption) {\n console.error(\n `Couldn't find option: ${value} in loadedOptions or state currentOptions`,\n {stateLoadedOptions: this.s.loadedOptions, stateCurrentOptions: this.s.currentOptions, propsOptions: this.props.options}\n )\n }\n }\n\n return foundOption\n })\n } else if (typeof this.props.options == \"function\" && this.props.values) {\n // Options haven't been loaded yet.\n } else if (this.props.values) {\n return this.p.values.map((value) => ({value}))\n }\n }\n\n return this.s.currentOptions\n }\n\n getCurrentOptionValues() {\n if (\"values\" in this.props) {\n return this.p.values\n }\n\n return this.getCurrentOptions().map((option) => option.value)\n }\n\n componentDidMount() {\n const {attribute, defaultValue, defaultValues, defaultValuesFromOptions, model, options} = this.props\n\n if (((defaultValue || defaultValues || defaultValuesFromOptions) || (attribute && model)) && typeof options == \"function\") {\n this.loadDefaultValuesFromOptionsCallback()\n }\n }\n\n componentDidUpdate() {\n const newState = {}\n\n if (\"toggled\" in this.props) {\n const newToggled = this.p.toggled\n\n if (anythingDifferent(this.state.toggled, newToggled)) {\n newState.toggled = newToggled\n }\n }\n\n if (Object.keys(newState).length > 0) {\n this.setState(newState)\n }\n }\n\n render() {\n const {endOfSelectRef} = this.tt\n const {transparent} = this.p\n const {className, placeholder, toggleOptions} = this.props\n const {opened, optionsPlacement} = this.s\n const currentOptions = this.getCurrentOptions()\n const id = idForComponent(this)\n\n const selectContainerStyleActual = this.stylingFor(\"selectContainer\", {\n flexDirection: \"row\",\n alignItems: \"center\",\n backgroundColor: transparent ? undefined : \"#fff\",\n border: transparent ? undefined : \"1px solid #999\",\n borderRadius: transparent ? undefined : 4,\n color: \"#000\",\n cursor: \"pointer\",\n paddingTop: 5,\n paddingBottom: 5,\n paddingLeft: 5\n })\n\n if (opened) {\n // Prevent select from changing size once the content is replaced with search text once opened\n selectContainerStyleActual.height = this.s.height\n\n if (optionsPlacement == \"above\") {\n selectContainerStyleActual.borderTopLeftRadius = 0\n selectContainerStyleActual.borderTopRightRadius = 0\n selectContainerStyleActual.borderBottomRightRadius = selectContainerStyleActual.borderRadius\n selectContainerStyleActual.borderBottomLeftRadius = selectContainerStyleActual.borderRadius\n\n delete selectContainerStyleActual.borderRadius\n } else if (optionsPlacement == \"below\") {\n selectContainerStyleActual.borderTopLeftRadius = selectContainerStyleActual.borderRadius\n selectContainerStyleActual.borderTopRightRadius = selectContainerStyleActual.borderRadius\n selectContainerStyleActual.borderBottomRightRadius = 0\n selectContainerStyleActual.borderBottomLeftRadius = 0\n\n delete selectContainerStyleActual.borderRadius\n }\n }\n\n return (\n <View\n dataSet={this.cache(\"rootViewDataSet\", {\n class: className,\n component: \"haya-select\",\n id,\n opened,\n optionsPlacement,\n toggles: Boolean(toggleOptions)\n }, [className, id, opened, optionsPlacement, Boolean(toggleOptions)])}\n style={this.stylingFor(\"main\")}\n >\n <Pressable\n dataSet={this.selectContainerDataSet ||= {class: \"select-container\"}}\n onLayout={this.tt.onSelectContainerLayout}\n onPress={this.tt.onSelectClicked}\n ref={this.tt.selectContainerRef}\n style={selectContainerStyleActual}\n >\n <View\n dataSet={this.currentSelectedDataSet ||= {class: \"current-selected\"}}\n style={this.stylingFor(\"currentSelected\", this.currentSelectedStyle ||= {width: \"calc(100% - 25px)\", flexWrap: \"wrap\", overflow: \"hidden\"})}\n >\n {opened &&\n <TextInput\n dataSet={this.searchTextInputDataSet ||= {class: \"search-text-input\"}}\n onChange={this.tt.onSearchTextInputChangedDebounced}\n onChangeText={this.tt.onChangeSearchText}\n placeholder={t(\".search_dot_dot_dot\")}\n ref={this.tt.searchTextInputRef}\n style={this.stylingFor(\"searchTextInput\", this.searchTextInputStyle ||= {\n width: \"100%\",\n border: 0,\n outline: \"none\",\n padding: 0\n })}\n value={this.state.searchText}\n />\n }\n {!opened &&\n <>\n {currentOptions.length == 0 &&\n <Text numberOfLines={1} style={this.stylingFor(\"nothingSelected\", this.nothingSelectedStyle ||= {color: \"grey\"})}>\n {placeholder || t(\".nothing_selected\")}\n </Text>\n }\n {currentOptions.length == 0 && Platform.OS == \"web\" &&\n <input\n id={idForComponent(this)}\n name={nameForComponentWithMultiple(this)}\n type=\"hidden\"\n value=\"\"\n />\n }\n {currentOptions.map((currentOption) =>\n <View\n dataSet={this.currentOptionDataSet ||= {class: \"current-option\"}}\n key={currentOption.key || `current-value-${currentOption.value}`}\n style={this.stylingFor(\"currentOption\", {marginRight: 6})}\n >\n {currentOption.type == \"group\" &&\n <View style={this.stylingFor(\"currentOptionGroup\", this.currentOptionGroupStyle ||= {fontWeight: \"bold\"})}>\n <Text style={this.stylingFor(\"currentOptionGroupText\")}>\n {currentOption.text}\n </Text>\n </View>\n }\n {currentOption.type != \"group\" &&\n <>\n {Platform.OS == \"web\" && nameForComponentWithMultiple(this) &&\n <input\n id={idForComponent(this)}\n name={nameForComponentWithMultiple(this)}\n type=\"hidden\"\n value={digg(currentOption, \"value\")}\n />\n }\n {this.presentOption(currentOption, \"current\")}\n </>\n }\n </View>\n )}\n </>\n }\n </View>\n <View\n dataSet={this.chevronContainerDataSet ||= {class: \"chevron-container\"}}\n style={this.stylingFor(\"chevronContainer\", this.chevronContainerStyle ||= {\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n marginLeft: \"auto\",\n marginRight: 8\n })}\n >\n <FontAwesomeIcon name={opened ? \"chevron-up\" : \"chevron-down\"} style={this.stylingFor(\"chevron\", this.chevronStyle ||= {fontSize: 12})} />\n </View>\n </Pressable>\n <View\n dataSet={this.endOfSelectDataSet ||= {class: \"end-of-select\"}}\n onLayout={this.tt.onEndOfSelectLayout}\n ref={endOfSelectRef}\n />\n {opened && this.p.optionsPortal &&\n <Portal>\n {this.optionsContainer()}\n </Portal>\n }\n {opened && !this.p.optionsPortal &&\n <View>\n {this.optionsContainer()}\n </View>\n }\n </View>\n )\n }\n\n defaultValues () {\n const {attribute, defaultValue, defaultValues, defaultValuesFromOptions, model} = this.props\n\n if (defaultValuesFromOptions) return defaultValuesFromOptions\n if (defaultValue) return defaultValue\n if (defaultValues) return defaultValues\n\n if (attribute && model) {\n if (!(attribute in model)) throw new Error(`No such attribute on ${model.modelClassData().name}: ${attribute}`)\n\n return model[attribute]()\n }\n }\n\n isActive() {\n if (this.tt.endOfSelectRef.current) {\n return true\n }\n\n return false\n }\n\n async loadDefaultValuesFromOptionsCallback() {\n const defaultValues = this.defaultValues()\n\n if (!defaultValues) return\n\n const result = await this.props.options({\n searchValue: this.s.searchText,\n values: defaultValues\n })\n\n this.setState({currentOptions: this.state.currentOptions.concat(result)})\n }\n\n loadOptions = async () => {\n const {options} = this.p\n const searchValue = this.s.searchText\n\n if (Array.isArray(options)) {\n return this.loadOptionsFromArray(options, searchValue)\n }\n\n const loadedOptions = await options({searchValue})\n\n this.setState({loadedOptions})\n }\n\n hayaSelectOption({key, loadedOption}) {\n if (loadedOption.type == \"group\") {\n return <OptionGroup key={key} option={loadedOption} />\n }\n\n return (\n <Option\n currentOptionValues={this.getCurrentOptionValues()}\n icon={this.iconForOption(loadedOption)}\n key={key}\n option={loadedOption}\n onOptionClicked={this.tt.onOptionClicked}\n presentOption={this.tt.presentOption}\n />\n )\n }\n\n loadOptionsFromArray(options, searchValue) {\n const lowerSearchValue = searchValue?.toLowerCase()\n const loadedOptions = options.filter(({text}) => !lowerSearchValue || text?.toLowerCase()?.includes(lowerSearchValue))\n\n this.setState({loadedOptions})\n }\n\n onDimensionsChange = ({window}) => {\n this.windowWidth = window.width\n this.windowHeight = window.height\n }\n\n onSelectContainerLayout = (e) => this.setState({selectContainerLayout: Object.assign({}, digg(e, \"nativeEvent\", \"layout\"))})\n onEndOfSelectLayout = (e) => this.setState({endOfSelectLayout: Object.assign({}, digg(e, \"nativeEvent\", \"layout\"))})\n onOptionsContainerLayout = (e) => this.setState({optionsContainerLayout: Object.assign({}, digg(e, \"nativeEvent\", \"layout\"))})\n\n onSelectClicked = (e) => {\n e.preventDefault()\n e.stopPropagation()\n\n const {opened} = this.s\n\n if (opened) {\n this.closeOptions()\n } else {\n this.openOptions()\n }\n }\n\n onSearchTextInputChangedDebounced = debounce(this.tt.loadOptions, 200)\n\n closeOptions() {\n this.setState({\n height: null,\n loadedOptions: undefined,\n opened: false,\n optionsContainerLayout: null\n })\n\n if (this.props.onOptionsClosed) {\n this.props.onOptionsClosed({options: this.getCurrentOptions()})\n }\n\n if (this.p.onBlur) this.p.onBlur()\n }\n\n onChangeSearchText = (searchText) => this.setState({searchText})\n\n openOptions() {\n this.setOptionsPositionBelow()\n this.loadOptions()\n this.callOptionsPositionAboveIfOutsideScreen = true\n this.setState(\n {\n height: this.s.selectContainerLayout.height,\n opened: true,\n scrollLeft: Platform.OS == \"web\" ? document.documentElement.scrollLeft : null,\n scrollTop: Platform.OS == \"web\" ? document.documentElement.scrollTop : null,\n searchText: \"\"\n },\n () => {\n this.focusTextInput()\n }\n )\n\n if (this.p.onFocus) this.p.onFocus()\n }\n\n focusTextInput = () => digg(this.tt.searchTextInputRef, \"current\")?.focus()\n\n setOptionsPosition() {\n if (!this.isActive()) {\n return // Debounce after un-mount handeling.\n }\n\n this.callOptionsPositionAboveIfOutsideScreen = true\n this.setOptionsPositionBelow()\n }\n\n setOptionsPositionAboveIfOutsideScreen() {\n const {windowHeight} = this.tt\n const {optionsContainerLayout} = this.s\n const optionsTop = this.s.endOfSelectLayout.top\n const optionsTotalBottomPosition = optionsContainerLayout.height + optionsTop\n const windowHeightWithScroll = windowHeight + this.s.scrollTop\n\n if (windowHeightWithScroll < optionsTotalBottomPosition) {\n this.setOptionsPositionAbove()\n } else {\n this.setState({optionsVisibility: \"visible\"})\n }\n }\n\n setOptionsPositionAbove() {\n const {endOfSelectLayout} = this.s\n\n this.setState(\n {\n opened: true,\n optionsPlacement: \"above\",\n optionsVisibility: \"visible\",\n optionsWidth: endOfSelectLayout.width\n },\n () => this.focusTextInput()\n )\n }\n\n setOptionsPositionBelow() {\n this.setState(\n {\n opened: true,\n optionsPlacement: \"below\",\n optionsVisibility: \"hidden\",\n optionsWidth: this.s.endOfSelectLayout.width\n },\n () => this.focusTextInput()\n )\n }\n\n onAnythingResized = () => {\n if (this.s.opened) {\n this.setOptionsPosition()\n }\n }\n\n onAnythingResizedDebounced = debounce(this.tt.onAnythingResized, 25)\n\n onAnythingScrolled = () => {\n if (this.s.opened) {\n this.setState({\n scrollLeft: Platform.OS == \"web\" ? document.documentElement.scrollLeft : null,\n scrollTop: Platform.OS == \"web\" ? document.documentElement.scrollTop : null\n })\n this.setOptionsPosition()\n }\n }\n\n onAnythingScrolledDebounced = debounce(this.tt.onAnythingScrolled, 25)\n\n onWindowClicked = (e) => {\n const {optionsContainerRef} = this.tt\n const {opened} = this.s\n\n // If options are open and a click is made outside of the options container\n if (opened && optionsContainerRef.current && !optionsContainerRef.current?.contains(e.target)) {\n this.closeOptions()\n }\n }\n\n optionsContainer() {\n const {selectContainerLayout, loadedOptions, endOfSelectLayout, optionsContainerLayout, optionsPlacement, optionsVisibility} = this.s\n let left, top\n\n let style = {\n position: \"absolute\",\n zIndex: 99999,\n elevation: 99999,\n visibility: optionsVisibility,\n width: this.p.optionsWidth || this.s.optionsWidth,\n backgroundColor: \"#fff\",\n border: \"1px solid #999\",\n maxHeight: 300,\n overflowY: \"auto\"\n }\n\n if (!this.p.optionsPortal) {\n style.top = 0\n style.left = 0\n } else if (!this.p.optionsAbsolute) {\n style.left = 0\n style.bottom = 0\n } else if (optionsPlacement == \"below\") {\n if (Platform.OS == \"web\") {\n // onLayout top value is sometimes negative so use browser JS to get it instead\n top = digg(this.tt.endOfSelectRef.current.getBoundingClientRect(), \"top\") + document.documentElement.scrollTop + 1\n\n // onLayout left values doesn't always update when changed\n left = digg(this.tt.endOfSelectRef.current.getBoundingClientRect(), \"left\") + document.documentElement.scrollLeft\n } else {\n left = this.s.endOfSelectLayout.left\n top = selectContainerLayout.top\n }\n\n style.left = left\n style.top = top - 2\n } else if (optionsPlacement == \"above\") {\n if (Platform.OS == \"web\") {\n // onLayout top value is sometimes negative so use browser JS to get it instead\n top = digg(this.tt.selectContainerRef.current.getBoundingClientRect(), \"top\") + document.documentElement.scrollTop\n\n // onLayout left values doesn't always update when changed\n left = digg(this.tt.selectContainerRef.current.getBoundingClientRect(), \"left\") + document.documentElement.scrollLeft\n } else {\n left = endOfSelectLayout.left\n top = selectContainerLayout.top\n }\n\n style.left = left\n style.top = top - optionsContainerLayout.height + 1\n } else {\n throw new Error(`Unkonwn options placement: ${optionsPlacement}`)\n }\n\n style = this.stylingFor(\"optionsContainer\", style)\n\n const id = idForComponent(this)\n\n return (\n <View\n dataSet={this.cache(\"optionsContainerDataSet\", {class: \"options-container\", id, role: \"dialog\"}, [id])}\n onLayout={this.tt.onOptionsContainerLayout}\n ref={this.tt.optionsContainerRef}\n style={style}\n >\n {loadedOptions?.map((loadedOption) =>\n this.hayaSelectOption({\n key: loadedOption.key || `loaded-option-${loadedOption.value}`,\n loadedOption\n })\n )}\n {loadedOptions?.length === 0 &&\n <View dataSet={this.noOptionsContainerDataSet ||= {class: \"no-options-container\"}}>\n <Text>{t(\".no_options_found\")}</Text>\n </View>\n }\n </View>\n )\n }\n\n onOptionClicked = (event, loadedOption) => {\n event.preventDefault()\n event.stopPropagation()\n\n const {onChange, toggleOptions} = this.props\n const {multiple} = this.p\n const currentOptions = this.getCurrentOptions()\n const toggled = this.getToggled()\n const newState = {}\n const existingOption = currentOptions.find((currentOption) => currentOption.value == loadedOption.value)\n const newToggled = {...toggled}\n let newCurrentOptions\n\n if (existingOption) {\n if (toggleOptions) {\n const currentToggle = toggled[loadedOption.value]\n const currentIndex = toggleOptions.findIndex((element) => element.value == currentToggle)\n\n if (currentIndex >= (toggleOptions.length - 1)) {\n // No next toggled - remove toggled and option\n delete newToggled[loadedOption.value]\n\n newCurrentOptions = currentOptions.filter((currentOption) => currentOption.value != loadedOption.value)\n } else {\n // Already toggled - set to next toggle\n newToggled[loadedOption.value] = digg(toggleOptions, currentIndex + 1, \"value\")\n }\n\n newState.toggled = newToggled\n } else {\n // Remove from current options\n newCurrentOptions = currentOptions.filter((currentOption) => currentOption.value != loadedOption.value)\n }\n } else {\n // Don't do anything if the clicked option is disabled\n if (loadedOption.disabled) return\n\n if (toggleOptions) {\n // Set fresh toggle\n newToggled[loadedOption.value] = toggleOptions[0].value\n newState.toggled = newToggled\n }\n\n if (multiple || toggleOptions) {\n newCurrentOptions = currentOptions.concat([loadedOption])\n } else {\n newCurrentOptions = [loadedOption]\n }\n }\n\n if (\"values\" in this.props && this.props.values !== undefined) {\n // currentOptions are controlled and a useMemo callback is handeling setting current options.\n } else if (newCurrentOptions) {\n newState.currentOptions = newCurrentOptions\n }\n\n const options = newCurrentOptions || currentOptions\n\n if (onChange) {\n onChange({\n event,\n options,\n toggles: newToggled\n })\n }\n\n if (this.props.onChangeValue) {\n let optionValue\n\n if (multiple) {\n optionValue = options.map((option) => option.value)\n } else {\n optionValue = dig(options, 0, \"value\")\n }\n\n this.p.onChangeValue(optionValue)\n }\n\n if (!multiple) this.closeOptions()\n this.setState(newState)\n }\n\n stylingFor(stylingName, style = {}) {\n let customStyling = dig(this, \"props\", \"styles\", stylingName)\n\n if (typeof customStyling == \"function\") customStyling = customStyling({state: this.state, style})\n\n if (customStyling) {\n return Object.assign(style, customStyling)\n }\n\n return style\n }\n\n iconForOption(option) {\n const {toggleOptions} = this.props || {}\n const toggled = this.getToggled()\n\n if (toggleOptions && (option.value in toggled)) {\n const toggledValue = toggled[option.value]\n const toggledOption = toggleOptions.find((element) => element.value == toggledValue)\n\n if (!toggledOption) {\n throw new Error(`Couldn't find a toggle option for value: ${toggledValue}`)\n }\n\n return toggledOption.icon\n }\n }\n\n presentOption = (option, mode) => {\n const {toggleOptions} = this.props || {}\n const toggled = this.getToggled()\n const icon = this.iconForOption(option)\n const toggleValue = toggled[option.value]\n const toggleOption = toggleOptions?.find((toggleOptionI) => toggleOptionI.value == toggleValue)\n let style\n\n if (mode == \"current\") {\n style = this.stylingFor(\"currentOptionPresentationText\", {flex: 1, whiteSpace: \"nowrap\"})\n } else {\n style = this.stylingFor(\"optionPresentationText\", {flex: 1, whiteSpace: \"nowrap\"})\n }\n\n return (\n <View\n dataSet={{\n class: \"option-presentation\",\n text: option.text,\n toggleIcon: toggleOption?.icon,\n toggleValue: toggleOption?.value,\n value: option.value\n }}\n style={this.optionPresentationStyle ||= {flexDirection: \"row\"}}\n >\n {toggleOptions && !(option.value in toggled) &&\n <View\n dataSet={this.toggleIconPlaceholderDataSet ||= {class: \"toggle-icon-placeholder\"}}\n style={this.toggleIconPlaceholderStyle ||= {width: 20}}\n />\n }\n {toggleOptions && (option.value in toggled) &&\n <View style={this.toggleIconContainerStyle ||= {alignItems: \"center\", justifyContent: \"center\", width: 20}}>\n <FontAwesomeIcon\n dataSet={this.toggleIconDataSet ||= {class: \"toggle-icon\"}}\n name={icon}\n />\n </View>\n }\n {(() => {\n if (mode == \"current\" && option.currentContent) {\n return option.currentContent()\n } else if (option.content) {\n return option.content()\n } else if (\"html\" in option && Platform.OS != \"web\") {\n return <RenderHtml source={{html: digg(option, \"html\")}} />\n } else if (\"html\" in option && Platform.OS == \"web\") {\n return <div dangerouslySetInnerHTML={{__html: digg(option, \"html\")}} />\n } else {\n return (\n <Text\n dataSet={this.optionPresentationTextDataSet ||= {class: \"option-presentation-text\"}}\n style={style}\n >\n {option.text}\n </Text>\n )\n }\n })()}\n </View>\n )\n }\n\n async setCurrentFromGivenValues() {\n const {options, values} = this.p\n const currentOptions = await options({values})\n const currentValues = currentOptions?.map((currentOption) => currentOption.value)\n const stateValues = this.s.currentOptions?.map((currentOption) => currentOption.value)\n\n if (anythingDifferent(currentValues, stateValues)) {\n this.setState({currentOptions})\n }\n }\n}))\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/select/index.jsx"],"names":[],"mappings":"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","sourcesContent":["import {anythingDifferent} from \"set-state-compare/src/diff-utils\"\nimport config from \"../config.js\"\nimport {dig, digg} from \"diggerize\"\nimport {Dimensions, Platform, Pressable, Text, TextInput, View} from \"react-native\"\nimport React, {memo, useEffect, useRef} from \"react\"\nimport {shapeComponent, ShapeComponent} from \"set-state-compare/src/shape-component.js\"\nimport debounce from \"debounce\"\nimport FontAwesomeIcon from \"react-native-vector-icons/FontAwesome\"\nimport idForComponent from \"@kaspernj/api-maker/build/inputs/id-for-component\"\nimport nameForComponent from \"@kaspernj/api-maker/build/inputs/name-for-component\"\nimport Option from \"./option\"\nimport OptionGroup from \"./option-group\"\nimport PropTypes from \"prop-types\"\nimport propTypesExact from \"prop-types-exact\"\nimport RenderHtml from \"react-native-render-html\"\nimport {Portal} from \"conjointment\"\nimport useEventListener from \"@kaspernj/api-maker/build/use-event-listener\"\n\nconst nameForComponentWithMultiple = (component) => {\n let name = nameForComponent(component)\n\n const currentOptions = component.getCurrentOptions()\n\n if (component.props.multiple && name && currentOptions.length > 0) {\n name += \"[]\"\n }\n\n return name\n}\n\nexport default memo(shapeComponent(class HayaSelect extends ShapeComponent {\n static defaultProps = {\n multiple: false,\n onBlur: null,\n onFocus: null,\n optionsAbsolute: true,\n optionsPortal: true,\n optionsWidth: null,\n search: false,\n transparent: false\n }\n\n static propTypes = propTypesExact({\n attribute: PropTypes.string,\n className: PropTypes.string,\n defaultToggled: PropTypes.object,\n defaultValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n defaultValues: PropTypes.array,\n defaultValuesFromOptions: PropTypes.array,\n id: PropTypes.node,\n model: PropTypes.object,\n multiple: PropTypes.bool.isRequired,\n name: PropTypes.string,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n onChangeValue: PropTypes.func,\n onFocus: PropTypes.func,\n onOptionsClosed: PropTypes.func,\n options: PropTypes.oneOfType([PropTypes.array, PropTypes.func]).isRequired,\n optionsAbsolute: PropTypes.bool.isRequired,\n optionsPortal: PropTypes.bool.isRequired,\n optionsWidth: PropTypes.number,\n placeholder: PropTypes.node,\n search: PropTypes.bool.isRequired,\n styles: PropTypes.object,\n toggled: PropTypes.object,\n toggleOptions: PropTypes.arrayOf(PropTypes.shape({\n icon: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired\n })),\n transparent: PropTypes.bool.isRequired,\n values: PropTypes.array\n })\n\n callOptionsPositionAboveIfOutsideScreen = false\n windowWidth = Dimensions.get(\"window\").width\n windowHeight = Dimensions.get(\"window\").height\n\n setup() {\n const {t} = config.getUseTranslate()()\n\n if (this.props.values) {\n for (const value of this.props.values) {\n if (typeof value == \"undefined\") {\n throw new Error(\"HayaSelect: Undefined given as value\")\n }\n }\n }\n\n this.setInstance({\n endOfSelectRef: useRef(),\n optionsContainerRef: useRef(),\n searchTextInputRef: useRef(),\n selectContainerRef: useRef(),\n t\n })\n this.useStates({\n currentOptions: () => this.defaultCurrentOptions(),\n selectContainerLayout: null,\n endOfSelectLayout: null,\n height: null,\n loadedOptions: () => this.defaultLoadedOptions(),\n opened: false,\n optionsContainerLayout: null,\n optionsPlacement: undefined,\n optionsTop: undefined,\n optionsVisibility: undefined,\n optionsWidth: undefined,\n scrollLeft: Platform.OS == \"web\" ? document.documentElement.scrollLeft : null,\n scrollTop: Platform.OS == \"web\" ? document.documentElement.scrollTop : null,\n searchText: \"\",\n toggled: () => this.defaultToggled()\n })\n\n useEventListener(Dimensions, \"change\", this.tt.onDimensionsChange)\n\n if (Platform.OS == \"web\") {\n useEventListener(window, \"click\", this.tt.onWindowClicked)\n useEventListener(window, \"resize\", this.tt.onAnythingResizedDebounced)\n useEventListener(window, \"scroll\", this.tt.onAnythingScrolledDebounced)\n }\n\n useEffect(() => {\n if (this.tt.callOptionsPositionAboveIfOutsideScreen && this.s.optionsContainerLayout) {\n this.callOptionsPositionAboveIfOutsideScreen = false\n this.setOptionsPositionAboveIfOutsideScreen()\n }\n }, [this.tt.callOptionsPositionAboveIfOutsideScreen, this.s.optionsContainerLayout])\n\n useEffect(() => {\n const currentOptionIds = this.s.currentOptions?.map((currentOption) => currentOption.value)\n\n if (this.props.values && anythingDifferent(currentOptionIds, this.props.values) && typeof this.props.options == \"function\") {\n this.setCurrentFromGivenValues()\n }\n }, [this.props.values])\n }\n\n translate(msgID) {\n if (msgID.startsWith(\".\")) {\n return this.t(`haya_select${msgID}`)\n } else {\n return this.t(msgID)\n }\n }\n\n defaultCurrentOptions() {\n const {defaultValue, defaultValues, values} = this.props\n const {options} = this.p\n\n if (!Array.isArray(options)) return []\n\n return options.filter(({value}) =>\n (defaultValue && value == defaultValue) ||\n (defaultValues && defaultValues.includes(value)) ||\n (values && values.includes(value))\n )\n }\n\n defaultLoadedOptions() {\n const {options} = this.p\n\n if (typeof options == \"function\") {\n return undefined\n } else if (Array.isArray(options)) {\n return options\n }\n\n throw new Error(`Unknown type of options: ${typeof options}`)\n }\n\n defaultToggled = () => (\"toggled\" in this.props) ? this.p.toggled : this.props.defaultToggled || {}\n getToggled = () => (\"toggled\" in this.props) ? this.p.toggled : this.s.toggled\n getValues = () => (\"values\" in this.props) ? this.p.values : this.s.currentOptions.map((currentOption) => currentOption.value)\n getCurrentOptions = () => {\n if (\"values\" in this.props && typeof this.props.values != \"undefined\") {\n if (Array.isArray(this.props.options) && this.props.values) {\n return this.p.values.map((value) => this.p.options.find((option) => option.value == value))\n } else if (this.s.loadedOptions && this.props.values) {\n return this.p.values.map((value) => {\n let foundOption = this.s.loadedOptions.find((option) => option.value == value)\n\n if (!foundOption) {\n foundOption = this.s.currentOptions.find((option) => option.value == value)\n\n if (!foundOption) {\n console.error(\n `Couldn't find option: ${value} in loadedOptions or state currentOptions`,\n {stateLoadedOptions: this.s.loadedOptions, stateCurrentOptions: this.s.currentOptions, propsOptions: this.props.options}\n )\n }\n }\n\n return foundOption\n })\n } else if (typeof this.props.options == \"function\" && this.props.values) {\n // Options haven't been loaded yet.\n } else if (this.props.values) {\n return this.p.values.map((value) => ({value}))\n }\n }\n\n return this.s.currentOptions\n }\n\n getCurrentOptionValues() {\n if (\"values\" in this.props) {\n return this.p.values\n }\n\n return this.getCurrentOptions().map((option) => option.value)\n }\n\n componentDidMount() {\n const {attribute, defaultValue, defaultValues, defaultValuesFromOptions, model, options} = this.props\n\n if (((defaultValue || defaultValues || defaultValuesFromOptions) || (attribute && model)) && typeof options == \"function\") {\n this.loadDefaultValuesFromOptionsCallback()\n }\n }\n\n componentDidUpdate() {\n const newState = {}\n\n if (\"toggled\" in this.props) {\n const newToggled = this.p.toggled\n\n if (anythingDifferent(this.state.toggled, newToggled)) {\n newState.toggled = newToggled\n }\n }\n\n if (Object.keys(newState).length > 0) {\n this.setState(newState)\n }\n }\n\n render() {\n const {endOfSelectRef} = this.tt\n const {transparent} = this.p\n const {className, placeholder, toggleOptions} = this.props\n const {opened, optionsPlacement} = this.s\n const currentOptions = this.getCurrentOptions()\n const id = idForComponent(this)\n\n const selectContainerStyleActual = this.stylingFor(\"selectContainer\", {\n flexDirection: \"row\",\n alignItems: \"center\",\n backgroundColor: transparent ? undefined : \"#fff\",\n border: transparent ? undefined : \"1px solid #999\",\n borderRadius: transparent ? undefined : 4,\n color: \"#000\",\n cursor: \"pointer\",\n paddingTop: 5,\n paddingBottom: 5,\n paddingLeft: 5\n }, [transparent])\n\n if (opened) {\n // Prevent select from changing size once the content is replaced with search text once opened\n selectContainerStyleActual.height = this.s.height\n\n if (optionsPlacement == \"above\") {\n selectContainerStyleActual.borderTopLeftRadius = 0\n selectContainerStyleActual.borderTopRightRadius = 0\n selectContainerStyleActual.borderBottomRightRadius = selectContainerStyleActual.borderRadius\n selectContainerStyleActual.borderBottomLeftRadius = selectContainerStyleActual.borderRadius\n\n delete selectContainerStyleActual.borderRadius\n } else if (optionsPlacement == \"below\") {\n selectContainerStyleActual.borderTopLeftRadius = selectContainerStyleActual.borderRadius\n selectContainerStyleActual.borderTopRightRadius = selectContainerStyleActual.borderRadius\n selectContainerStyleActual.borderBottomRightRadius = 0\n selectContainerStyleActual.borderBottomLeftRadius = 0\n\n delete selectContainerStyleActual.borderRadius\n }\n }\n\n return (\n <View\n dataSet={this.cache(\"rootViewDataSet\", {\n class: className,\n component: \"haya-select\",\n id,\n opened,\n optionsPlacement,\n toggles: Boolean(toggleOptions)\n }, [className, id, opened, optionsPlacement, Boolean(toggleOptions)])}\n style={this.stylingFor(\"main\")}\n >\n <Pressable\n dataSet={this.selectContainerDataSet ||= {class: \"select-container\"}}\n onLayout={this.tt.onSelectContainerLayout}\n onPress={this.tt.onSelectClicked}\n ref={this.tt.selectContainerRef}\n style={selectContainerStyleActual}\n >\n <View\n dataSet={this.currentSelectedDataSet ||= {class: \"current-selected\"}}\n style={this.stylingFor(\"currentSelected\", this.currentSelectedStyle ||= {width: \"calc(100% - 25px)\", flexWrap: \"wrap\", overflow: \"hidden\"})}\n >\n {opened &&\n <TextInput\n dataSet={this.searchTextInputDataSet ||= {class: \"search-text-input\"}}\n onChange={this.tt.onSearchTextInputChangedDebounced}\n onChangeText={this.tt.onChangeSearchText}\n placeholder={this.translate(\".search_dot_dot_dot\")}\n ref={this.tt.searchTextInputRef}\n style={this.stylingFor(\"searchTextInput\", this.searchTextInputStyle ||= {\n width: \"100%\",\n border: 0,\n outline: \"none\",\n padding: 0\n })}\n value={this.state.searchText}\n />\n }\n {!opened &&\n <>\n {currentOptions.length == 0 &&\n <Text numberOfLines={1} style={this.stylingFor(\"nothingSelected\", this.nothingSelectedStyle ||= {color: \"grey\"})}>\n {placeholder || this.translate(\".nothing_selected\")}\n </Text>\n }\n {currentOptions.length == 0 && Platform.OS == \"web\" &&\n <input\n id={idForComponent(this)}\n name={nameForComponentWithMultiple(this)}\n type=\"hidden\"\n value=\"\"\n />\n }\n {currentOptions.map((currentOption) =>\n <View\n dataSet={this.currentOptionDataSet ||= {class: \"current-option\"}}\n key={currentOption.key || `current-value-${currentOption.value}`}\n style={this.stylingFor(\"currentOption\", {marginRight: 6})}\n >\n {currentOption.type == \"group\" &&\n <View style={this.stylingFor(\"currentOptionGroup\", this.currentOptionGroupStyle ||= {fontWeight: \"bold\"})}>\n <Text style={this.stylingFor(\"currentOptionGroupText\")}>\n {currentOption.text}\n </Text>\n </View>\n }\n {currentOption.type != \"group\" &&\n <>\n {Platform.OS == \"web\" && nameForComponentWithMultiple(this) &&\n <input\n id={idForComponent(this)}\n name={nameForComponentWithMultiple(this)}\n type=\"hidden\"\n value={digg(currentOption, \"value\")}\n />\n }\n {this.presentOption(currentOption, \"current\")}\n </>\n }\n </View>\n )}\n </>\n }\n </View>\n <View\n dataSet={this.chevronContainerDataSet ||= {class: \"chevron-container\"}}\n style={this.stylingFor(\"chevronContainer\", this.chevronContainerStyle ||= {\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n marginLeft: \"auto\",\n marginRight: 8\n })}\n >\n <FontAwesomeIcon name={opened ? \"chevron-up\" : \"chevron-down\"} style={this.stylingFor(\"chevron\", this.chevronStyle ||= {fontSize: 12})} />\n </View>\n </Pressable>\n <View\n dataSet={this.endOfSelectDataSet ||= {class: \"end-of-select\"}}\n onLayout={this.tt.onEndOfSelectLayout}\n ref={endOfSelectRef}\n />\n {opened && this.p.optionsPortal &&\n <Portal>\n {this.optionsContainer()}\n </Portal>\n }\n {opened && !this.p.optionsPortal &&\n <View>\n {this.optionsContainer()}\n </View>\n }\n </View>\n )\n }\n\n defaultValues () {\n const {attribute, defaultValue, defaultValues, defaultValuesFromOptions, model} = this.props\n\n if (defaultValuesFromOptions) return defaultValuesFromOptions\n if (defaultValue) return defaultValue\n if (defaultValues) return defaultValues\n\n if (attribute && model) {\n if (!(attribute in model)) throw new Error(`No such attribute on ${model.modelClassData().name}: ${attribute}`)\n\n return model[attribute]()\n }\n }\n\n isActive() {\n if (this.tt.endOfSelectRef.current) {\n return true\n }\n\n return false\n }\n\n async loadDefaultValuesFromOptionsCallback() {\n const defaultValues = this.defaultValues()\n\n if (!defaultValues) return\n\n const result = await this.props.options({\n searchValue: this.s.searchText,\n values: defaultValues\n })\n\n this.setState({currentOptions: this.state.currentOptions.concat(result)})\n }\n\n loadOptions = async () => {\n const {options} = this.p\n const searchValue = this.s.searchText\n\n if (Array.isArray(options)) {\n return this.loadOptionsFromArray(options, searchValue)\n }\n\n const loadedOptions = await options({searchValue})\n\n this.setState({loadedOptions})\n }\n\n hayaSelectOption({key, loadedOption}) {\n if (loadedOption.type == \"group\") {\n return <OptionGroup key={key} option={loadedOption} />\n }\n\n return (\n <Option\n currentOptionValues={this.getCurrentOptionValues()}\n icon={this.iconForOption(loadedOption)}\n key={key}\n option={loadedOption}\n onOptionClicked={this.tt.onOptionClicked}\n presentOption={this.tt.presentOption}\n />\n )\n }\n\n loadOptionsFromArray(options, searchValue) {\n const lowerSearchValue = searchValue?.toLowerCase()\n const loadedOptions = options.filter(({text}) => !lowerSearchValue || text?.toLowerCase()?.includes(lowerSearchValue))\n\n this.setState({loadedOptions})\n }\n\n onDimensionsChange = ({window}) => {\n this.windowWidth = window.width\n this.windowHeight = window.height\n }\n\n onSelectContainerLayout = (e) => this.setState({selectContainerLayout: Object.assign({}, digg(e, \"nativeEvent\", \"layout\"))})\n onEndOfSelectLayout = (e) => this.setState({endOfSelectLayout: Object.assign({}, digg(e, \"nativeEvent\", \"layout\"))})\n onOptionsContainerLayout = (e) => this.setState({optionsContainerLayout: Object.assign({}, digg(e, \"nativeEvent\", \"layout\"))})\n\n onSelectClicked = (e) => {\n e.preventDefault()\n e.stopPropagation()\n\n const {opened} = this.s\n\n if (opened) {\n this.closeOptions()\n } else {\n this.openOptions()\n }\n }\n\n onSearchTextInputChangedDebounced = debounce(this.tt.loadOptions, 200)\n\n closeOptions() {\n this.setState({\n height: null,\n loadedOptions: undefined,\n opened: false,\n optionsContainerLayout: null\n })\n\n if (this.props.onOptionsClosed) {\n this.props.onOptionsClosed({options: this.getCurrentOptions()})\n }\n\n if (this.p.onBlur) this.p.onBlur()\n }\n\n onChangeSearchText = (searchText) => this.setState({searchText})\n\n openOptions() {\n this.setOptionsPositionBelow()\n this.loadOptions()\n this.callOptionsPositionAboveIfOutsideScreen = true\n this.setState(\n {\n height: this.s.selectContainerLayout.height,\n opened: true,\n scrollLeft: Platform.OS == \"web\" ? document.documentElement.scrollLeft : null,\n scrollTop: Platform.OS == \"web\" ? document.documentElement.scrollTop : null,\n searchText: \"\"\n },\n () => {\n this.focusTextInput()\n }\n )\n\n if (this.p.onFocus) this.p.onFocus()\n }\n\n focusTextInput = () => digg(this.tt.searchTextInputRef, \"current\")?.focus()\n\n setOptionsPosition() {\n if (!this.isActive()) {\n return // Debounce after un-mount handeling.\n }\n\n this.callOptionsPositionAboveIfOutsideScreen = true\n this.setOptionsPositionBelow()\n }\n\n setOptionsPositionAboveIfOutsideScreen() {\n const {windowHeight} = this.tt\n const {optionsContainerLayout} = this.s\n const optionsTop = this.s.endOfSelectLayout.top\n const optionsTotalBottomPosition = optionsContainerLayout.height + optionsTop\n const windowHeightWithScroll = windowHeight + this.s.scrollTop\n\n if (windowHeightWithScroll < optionsTotalBottomPosition) {\n this.setOptionsPositionAbove()\n } else {\n this.setState({optionsVisibility: \"visible\"})\n }\n }\n\n setOptionsPositionAbove() {\n const {endOfSelectLayout} = this.s\n\n this.setState(\n {\n opened: true,\n optionsPlacement: \"above\",\n optionsVisibility: \"visible\",\n optionsWidth: endOfSelectLayout.width\n },\n () => this.focusTextInput()\n )\n }\n\n setOptionsPositionBelow() {\n this.setState(\n {\n opened: true,\n optionsPlacement: \"below\",\n optionsVisibility: \"hidden\",\n optionsWidth: this.s.endOfSelectLayout.width\n },\n () => this.focusTextInput()\n )\n }\n\n onAnythingResized = () => {\n if (this.s.opened) {\n this.setOptionsPosition()\n }\n }\n\n onAnythingResizedDebounced = debounce(this.tt.onAnythingResized, 25)\n\n onAnythingScrolled = () => {\n if (this.s.opened) {\n this.setState({\n scrollLeft: Platform.OS == \"web\" ? document.documentElement.scrollLeft : null,\n scrollTop: Platform.OS == \"web\" ? document.documentElement.scrollTop : null\n })\n this.setOptionsPosition()\n }\n }\n\n onAnythingScrolledDebounced = debounce(this.tt.onAnythingScrolled, 25)\n\n onWindowClicked = (e) => {\n const {optionsContainerRef} = this.tt\n const {opened} = this.s\n\n // If options are open and a click is made outside of the options container\n if (opened && optionsContainerRef.current && !optionsContainerRef.current?.contains(e.target)) {\n this.closeOptions()\n }\n }\n\n optionsContainer() {\n const {selectContainerLayout, loadedOptions, endOfSelectLayout, optionsContainerLayout, optionsPlacement, optionsVisibility} = this.s\n let left, top\n\n let style = {\n position: \"absolute\",\n visibility: optionsVisibility,\n width: this.p.optionsWidth || this.s.optionsWidth,\n backgroundColor: \"#fff\",\n border: \"1px solid #999\",\n maxHeight: 300,\n overflowY: \"auto\"\n }\n\n if (!this.p.optionsPortal) {\n style.top = 0\n style.left = 0\n } else if (!this.p.optionsAbsolute) {\n style.left = 0\n style.bottom = 0\n } else if (optionsPlacement == \"below\") {\n if (Platform.OS == \"web\") {\n // onLayout top value is sometimes negative so use browser JS to get it instead\n top = digg(this.tt.endOfSelectRef.current.getBoundingClientRect(), \"top\") + document.documentElement.scrollTop + 1\n\n // onLayout left values doesn't always update when changed\n left = digg(this.tt.endOfSelectRef.current.getBoundingClientRect(), \"left\") + document.documentElement.scrollLeft\n } else {\n left = this.s.endOfSelectLayout.left\n top = selectContainerLayout.top\n }\n\n style.left = left\n style.top = top - 2\n } else if (optionsPlacement == \"above\") {\n if (Platform.OS == \"web\") {\n // onLayout top value is sometimes negative so use browser JS to get it instead\n top = digg(this.tt.selectContainerRef.current.getBoundingClientRect(), \"top\") + document.documentElement.scrollTop\n\n // onLayout left values doesn't always update when changed\n left = digg(this.tt.selectContainerRef.current.getBoundingClientRect(), \"left\") + document.documentElement.scrollLeft\n } else {\n left = endOfSelectLayout.left\n top = selectContainerLayout.top\n }\n\n style.left = left\n style.top = top - optionsContainerLayout.height + 1\n } else {\n throw new Error(`Unkonwn options placement: ${optionsPlacement}`)\n }\n\n style = this.stylingFor(\"optionsContainer\", style, [left, top, style.visibility, style.width])\n\n const id = idForComponent(this)\n\n return (\n <View\n dataSet={this.cache(\"optionsContainerDataSet\", {class: \"options-container\", id, role: \"dialog\"}, [id])}\n onLayout={this.tt.onOptionsContainerLayout}\n ref={this.tt.optionsContainerRef}\n style={style}\n >\n {loadedOptions?.map((loadedOption) =>\n this.hayaSelectOption({\n key: loadedOption.key || `loaded-option-${loadedOption.value}`,\n loadedOption\n })\n )}\n {loadedOptions?.length === 0 &&\n <View dataSet={this.noOptionsContainerDataSet ||= {class: \"no-options-container\"}}>\n <Text>{this.translate(\".no_options_found\")}</Text>\n </View>\n }\n </View>\n )\n }\n\n onOptionClicked = (event, loadedOption) => {\n event.preventDefault()\n event.stopPropagation()\n\n const {onChange, toggleOptions} = this.props\n const {multiple} = this.p\n const currentOptions = this.getCurrentOptions()\n const toggled = this.getToggled()\n const newState = {}\n const existingOption = currentOptions.find((currentOption) => currentOption.value == loadedOption.value)\n const newToggled = {...toggled}\n let newCurrentOptions\n\n if (existingOption) {\n if (toggleOptions) {\n const currentToggle = toggled[loadedOption.value]\n const currentIndex = toggleOptions.findIndex((element) => element.value == currentToggle)\n\n if (currentIndex >= (toggleOptions.length - 1)) {\n // No next toggled - remove toggled and option\n delete newToggled[loadedOption.value]\n\n newCurrentOptions = currentOptions.filter((currentOption) => currentOption.value != loadedOption.value)\n } else {\n // Already toggled - set to next toggle\n newToggled[loadedOption.value] = digg(toggleOptions, currentIndex + 1, \"value\")\n }\n\n newState.toggled = newToggled\n } else {\n // Remove from current options\n newCurrentOptions = currentOptions.filter((currentOption) => currentOption.value != loadedOption.value)\n }\n } else {\n // Don't do anything if the clicked option is disabled\n if (loadedOption.disabled) return\n\n if (toggleOptions) {\n // Set fresh toggle\n newToggled[loadedOption.value] = toggleOptions[0].value\n newState.toggled = newToggled\n }\n\n if (multiple || toggleOptions) {\n newCurrentOptions = currentOptions.concat([loadedOption])\n } else {\n newCurrentOptions = [loadedOption]\n }\n }\n\n if (\"values\" in this.props && this.props.values !== undefined) {\n // currentOptions are controlled and a useMemo callback is handeling setting current options.\n } else if (newCurrentOptions) {\n newState.currentOptions = newCurrentOptions\n }\n\n const options = newCurrentOptions || currentOptions\n\n if (onChange) {\n onChange({\n event,\n options,\n toggles: newToggled\n })\n }\n\n if (this.props.onChangeValue) {\n let optionValue\n\n if (multiple) {\n optionValue = options.map((option) => option.value)\n } else {\n optionValue = dig(options, 0, \"value\")\n }\n\n this.p.onChangeValue(optionValue)\n }\n\n if (!multiple) this.closeOptions()\n this.setState(newState)\n }\n\n stylingFor(stylingName, style = {}, caches = []) {\n let customStyling = dig(this, \"props\", \"styles\", stylingName)\n\n if (typeof customStyling == \"function\") customStyling = customStyling({state: this.state, style})\n\n if (customStyling) {\n return Object.assign(style, customStyling)\n }\n\n return this.cache(`stylingFor-${stylingName}`, style, caches)\n }\n\n iconForOption(option) {\n const {toggleOptions} = this.props || {}\n const toggled = this.getToggled()\n\n if (toggleOptions && (option.value in toggled)) {\n const toggledValue = toggled[option.value]\n const toggledOption = toggleOptions.find((element) => element.value == toggledValue)\n\n if (!toggledOption) {\n throw new Error(`Couldn't find a toggle option for value: ${toggledValue}`)\n }\n\n return toggledOption.icon\n }\n }\n\n presentOption = (option, mode) => {\n const {toggleOptions} = this.props || {}\n const toggled = this.getToggled()\n const icon = this.iconForOption(option)\n const toggleValue = toggled[option.value]\n const toggleOption = toggleOptions?.find((toggleOptionI) => toggleOptionI.value == toggleValue)\n let style\n\n if (mode == \"current\") {\n style = this.stylingFor(\"currentOptionPresentationText\", {flex: 1, whiteSpace: \"nowrap\"})\n } else {\n style = this.stylingFor(\"optionPresentationText\", {flex: 1, whiteSpace: \"nowrap\"})\n }\n\n return (\n <View\n dataSet={{\n class: \"option-presentation\",\n text: option.text,\n toggleIcon: toggleOption?.icon,\n toggleValue: toggleOption?.value,\n value: option.value\n }}\n style={this.optionPresentationStyle ||= {flexDirection: \"row\"}}\n >\n {toggleOptions && !(option.value in toggled) &&\n <View\n dataSet={this.toggleIconPlaceholderDataSet ||= {class: \"toggle-icon-placeholder\"}}\n style={this.toggleIconPlaceholderStyle ||= {width: 20}}\n />\n }\n {toggleOptions && (option.value in toggled) &&\n <View style={this.toggleIconContainerStyle ||= {alignItems: \"center\", justifyContent: \"center\", width: 20}}>\n <FontAwesomeIcon\n dataSet={this.toggleIconDataSet ||= {class: \"toggle-icon\"}}\n name={icon}\n />\n </View>\n }\n {(() => {\n if (mode == \"current\" && option.currentContent) {\n return option.currentContent()\n } else if (option.content) {\n return option.content()\n } else if (\"html\" in option && Platform.OS != \"web\") {\n return <RenderHtml source={{html: digg(option, \"html\")}} />\n } else if (\"html\" in option && Platform.OS == \"web\") {\n return <div dangerouslySetInnerHTML={{__html: digg(option, \"html\")}} />\n } else {\n return (\n <Text\n dataSet={this.optionPresentationTextDataSet ||= {class: \"option-presentation-text\"}}\n style={style}\n >\n {option.text}\n </Text>\n )\n }\n })()}\n </View>\n )\n }\n\n async setCurrentFromGivenValues() {\n const {options, values} = this.p\n const currentOptions = await options({values})\n const currentValues = currentOptions?.map((currentOption) => currentOption.value)\n const stateValues = this.s.currentOptions?.map((currentOption) => currentOption.value)\n\n if (anythingDifferent(currentValues, stateValues)) {\n this.setState({currentOptions})\n }\n }\n}))\n"]}
|
package/package.json
CHANGED
package/src/config.js
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
|
+
const shared = {}
|
|
2
|
+
|
|
3
|
+
const t = (msgID) => {
|
|
4
|
+
if (!shared._translateWarning) {
|
|
5
|
+
shared._translateWarning = true
|
|
6
|
+
console.log("HayaSelect: Translate method not set")
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
return msgID
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const useTranslateFallback = () => ({t})
|
|
13
|
+
|
|
1
14
|
class HayaSelectConfiguration {
|
|
2
|
-
|
|
15
|
+
_useTranslate = useTranslateFallback
|
|
3
16
|
|
|
4
17
|
getBodyPortal() {
|
|
5
18
|
if (!this._bodyPortal) throw new Error("bodyPortal wasn't set")
|
|
@@ -7,19 +20,21 @@ class HayaSelectConfiguration {
|
|
|
7
20
|
return this._bodyPortal
|
|
8
21
|
}
|
|
9
22
|
|
|
10
|
-
|
|
11
|
-
return this.
|
|
23
|
+
getUseTranslate() {
|
|
24
|
+
return this._useTranslate
|
|
12
25
|
}
|
|
13
26
|
|
|
14
27
|
setBodyPortal(newBodyPortal) {
|
|
15
28
|
this._bodyPortal = newBodyPortal
|
|
16
29
|
}
|
|
17
30
|
|
|
18
|
-
|
|
19
|
-
this.
|
|
31
|
+
setUseTranslate(callback) {
|
|
32
|
+
this._useTranslate = callback
|
|
20
33
|
}
|
|
21
34
|
}
|
|
22
35
|
|
|
23
|
-
|
|
36
|
+
if (!globalThis.hayaSelectConfig) {
|
|
37
|
+
globalThis.hayaSelectConfig = new HayaSelectConfiguration()
|
|
38
|
+
}
|
|
24
39
|
|
|
25
|
-
export default
|
|
40
|
+
export default globalThis.hayaSelectConfig
|
package/src/select/index.jsx
CHANGED
|
@@ -28,15 +28,6 @@ const nameForComponentWithMultiple = (component) => {
|
|
|
28
28
|
return name
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
const t = (msgID) => {
|
|
33
|
-
if (msgID.startsWith(".")) {
|
|
34
|
-
return config.getTranslate()(`haya_select${msgID}`)
|
|
35
|
-
} else {
|
|
36
|
-
return config.getTranslate()(msgID)
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
31
|
export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
41
32
|
static defaultProps = {
|
|
42
33
|
multiple: false,
|
|
@@ -87,6 +78,8 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
87
78
|
windowHeight = Dimensions.get("window").height
|
|
88
79
|
|
|
89
80
|
setup() {
|
|
81
|
+
const {t} = config.getUseTranslate()()
|
|
82
|
+
|
|
90
83
|
if (this.props.values) {
|
|
91
84
|
for (const value of this.props.values) {
|
|
92
85
|
if (typeof value == "undefined") {
|
|
@@ -99,7 +92,8 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
99
92
|
endOfSelectRef: useRef(),
|
|
100
93
|
optionsContainerRef: useRef(),
|
|
101
94
|
searchTextInputRef: useRef(),
|
|
102
|
-
selectContainerRef: useRef()
|
|
95
|
+
selectContainerRef: useRef(),
|
|
96
|
+
t
|
|
103
97
|
})
|
|
104
98
|
this.useStates({
|
|
105
99
|
currentOptions: () => this.defaultCurrentOptions(),
|
|
@@ -143,6 +137,14 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
143
137
|
}, [this.props.values])
|
|
144
138
|
}
|
|
145
139
|
|
|
140
|
+
translate(msgID) {
|
|
141
|
+
if (msgID.startsWith(".")) {
|
|
142
|
+
return this.t(`haya_select${msgID}`)
|
|
143
|
+
} else {
|
|
144
|
+
return this.t(msgID)
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
146
148
|
defaultCurrentOptions() {
|
|
147
149
|
const {defaultValue, defaultValues, values} = this.props
|
|
148
150
|
const {options} = this.p
|
|
@@ -253,7 +255,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
253
255
|
paddingTop: 5,
|
|
254
256
|
paddingBottom: 5,
|
|
255
257
|
paddingLeft: 5
|
|
256
|
-
})
|
|
258
|
+
}, [transparent])
|
|
257
259
|
|
|
258
260
|
if (opened) {
|
|
259
261
|
// Prevent select from changing size once the content is replaced with search text once opened
|
|
@@ -304,7 +306,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
304
306
|
dataSet={this.searchTextInputDataSet ||= {class: "search-text-input"}}
|
|
305
307
|
onChange={this.tt.onSearchTextInputChangedDebounced}
|
|
306
308
|
onChangeText={this.tt.onChangeSearchText}
|
|
307
|
-
placeholder={
|
|
309
|
+
placeholder={this.translate(".search_dot_dot_dot")}
|
|
308
310
|
ref={this.tt.searchTextInputRef}
|
|
309
311
|
style={this.stylingFor("searchTextInput", this.searchTextInputStyle ||= {
|
|
310
312
|
width: "100%",
|
|
@@ -319,7 +321,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
319
321
|
<>
|
|
320
322
|
{currentOptions.length == 0 &&
|
|
321
323
|
<Text numberOfLines={1} style={this.stylingFor("nothingSelected", this.nothingSelectedStyle ||= {color: "grey"})}>
|
|
322
|
-
{placeholder ||
|
|
324
|
+
{placeholder || this.translate(".nothing_selected")}
|
|
323
325
|
</Text>
|
|
324
326
|
}
|
|
325
327
|
{currentOptions.length == 0 && Platform.OS == "web" &&
|
|
@@ -613,8 +615,6 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
613
615
|
|
|
614
616
|
let style = {
|
|
615
617
|
position: "absolute",
|
|
616
|
-
zIndex: 99999,
|
|
617
|
-
elevation: 99999,
|
|
618
618
|
visibility: optionsVisibility,
|
|
619
619
|
width: this.p.optionsWidth || this.s.optionsWidth,
|
|
620
620
|
backgroundColor: "#fff",
|
|
@@ -661,7 +661,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
661
661
|
throw new Error(`Unkonwn options placement: ${optionsPlacement}`)
|
|
662
662
|
}
|
|
663
663
|
|
|
664
|
-
style = this.stylingFor("optionsContainer", style)
|
|
664
|
+
style = this.stylingFor("optionsContainer", style, [left, top, style.visibility, style.width])
|
|
665
665
|
|
|
666
666
|
const id = idForComponent(this)
|
|
667
667
|
|
|
@@ -680,7 +680,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
680
680
|
)}
|
|
681
681
|
{loadedOptions?.length === 0 &&
|
|
682
682
|
<View dataSet={this.noOptionsContainerDataSet ||= {class: "no-options-container"}}>
|
|
683
|
-
<Text>{
|
|
683
|
+
<Text>{this.translate(".no_options_found")}</Text>
|
|
684
684
|
</View>
|
|
685
685
|
}
|
|
686
686
|
</View>
|
|
@@ -769,7 +769,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
769
769
|
this.setState(newState)
|
|
770
770
|
}
|
|
771
771
|
|
|
772
|
-
stylingFor(stylingName, style = {}) {
|
|
772
|
+
stylingFor(stylingName, style = {}, caches = []) {
|
|
773
773
|
let customStyling = dig(this, "props", "styles", stylingName)
|
|
774
774
|
|
|
775
775
|
if (typeof customStyling == "function") customStyling = customStyling({state: this.state, style})
|
|
@@ -778,7 +778,7 @@ export default memo(shapeComponent(class HayaSelect extends ShapeComponent {
|
|
|
778
778
|
return Object.assign(style, customStyling)
|
|
779
779
|
}
|
|
780
780
|
|
|
781
|
-
return style
|
|
781
|
+
return this.cache(`stylingFor-${stylingName}`, style, caches)
|
|
782
782
|
}
|
|
783
783
|
|
|
784
784
|
iconForOption(option) {
|