combo-box.jsx (1514B)
1 /* 2 GoToSocial 3 Copyright (C) GoToSocial Authors admin@gotosocial.org 4 SPDX-License-Identifier: AGPL-3.0-or-later 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 "use strict"; 21 22 const React = require("react"); 23 24 const { useComboboxState } = require("ariakit/combobox"); 25 26 const _default = ""; 27 module.exports = function useComboBoxInput({ name, Name }, { initialValue = _default }) { 28 const [isNew, setIsNew] = React.useState(false); 29 30 const state = useComboboxState({ 31 defaultValue: initialValue, 32 gutter: 0, 33 sameWidth: true 34 }); 35 36 function reset() { 37 state.setValue(initialValue); 38 } 39 40 return Object.assign([ 41 state, 42 reset, 43 { 44 [name]: state.value, 45 name, 46 [`${name}IsNew`]: isNew, 47 [`set${Name}IsNew`]: setIsNew 48 } 49 ], { 50 name, 51 state, 52 value: state.value, 53 setter: (val) => state.setValue(val), 54 hasChanged: () => state.value != initialValue, 55 isNew, 56 setIsNew, 57 reset, 58 _default 59 }); 60 };