X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;ds=sidebyside;f=resources%2Fjs%2Fcomponents%2Fcommon%2FDiscordChannelSelect.js;h=01ee3b0fa534a2c1cc8474ad7f6da775995924e5;hb=HEAD;hp=fd5fe8d1c35a3c97a098f98628711831b20c8fa3;hpb=b45c183b7ba39080b6438c6238bad614c4d3953e;p=alttp.git diff --git a/resources/js/components/common/DiscordChannelSelect.js b/resources/js/components/common/DiscordChannelSelect.js deleted file mode 100644 index fd5fe8d..0000000 --- a/resources/js/components/common/DiscordChannelSelect.js +++ /dev/null @@ -1,140 +0,0 @@ -import axios from 'axios'; -import PropTypes from 'prop-types'; -import React, { useCallback, useEffect, useState } from 'react'; -import { Alert, Button, Form, ListGroup } from 'react-bootstrap'; -import { useTranslation } from 'react-i18next'; - -import Icon from './Icon'; -import ChannelBox from '../discord-guilds/ChannelBox'; -import debounce from '../../helpers/debounce'; - -const DiscordChannelSelect = ({ - guild, - isInvalid, - name, - onBlur, - onChange, - types, - value, -}) => { - const [resolved, setResolved] = useState(null); - const [results, setResults] = useState([]); - const [search, setSearch] = useState(''); - const [showResults, setShowResults] = useState(false); - - const ref = React.useRef(null); - const { t } = useTranslation(); - - useEffect(() => { - const handleEventOutside = e => { - if (ref.current && !ref.current.contains(e.target)) { - setShowResults(false); - } - }; - document.addEventListener('click', handleEventOutside, true); - document.addEventListener('focus', handleEventOutside, true); - return () => { - document.removeEventListener('click', handleEventOutside, true); - document.removeEventListener('focus', handleEventOutside, true); - }; - }, []); - - let ctrl = null; - const fetch = useCallback(debounce(async (guild, phrase, types) => { - if (ctrl) { - ctrl.abort(); - } - ctrl = new AbortController(); - try { - const response = await axios.get(`/api/discord-guilds/${guild}/channels`, { - params: { - phrase, - types, - }, - signal: ctrl.signal, - }); - ctrl = null; - setResults(response.data); - } catch (e) { - ctrl = null; - console.error(e); - } - return () => { - if (ctrl) ctrl.abort(); - }; - }, 300), []); - - useEffect(() => { - fetch(guild, search, types); - }, [guild, search, ...types]); - - useEffect(() => { - if (value) { - axios - .get(`/api/discord-channels/${value}`) - .then(response => { - setResolved(response.data); - }); - } else { - setResolved(null); - } - }, [value]); - - if (value) { - return
- {resolved ? : value} - -
; - } - return
- setSearch(e.target.value)} - onFocus={() => setShowResults(true)} - type="search" - value={search} - /> -
- {results.length ? - - {results.map(result => - onChange({ - channel: result, - target: { name, value: result.channel_id }, - })} - > - - - )} - - : - - {t('search.noResults')} - - } -
-
; -}; - -DiscordChannelSelect.propTypes = { - guild: PropTypes.string, - isInvalid: PropTypes.bool, - name: PropTypes.string, - onBlur: PropTypes.func, - onChange: PropTypes.func, - types: PropTypes.arrayOf(PropTypes.number), - value: PropTypes.string, -}; - -export default DiscordChannelSelect;