From 81ef21a0c802f1d905f37a2a818544a8b400793c Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Sat, 25 Feb 2023 14:34:32 +0100 Subject: [Glitch] Rename JSX files with proper `.jsx` extension Port 44a7d87cb1f5df953b6c14c16c59e2e4ead1bcb9 to glitch-soc Signed-off-by: Claire --- .../glitch/features/filters/added_to_filter.js | 102 ----------- .../glitch/features/filters/added_to_filter.jsx | 102 +++++++++++ .../glitch/features/filters/select_filter.js | 192 --------------------- .../glitch/features/filters/select_filter.jsx | 192 +++++++++++++++++++++ 4 files changed, 294 insertions(+), 294 deletions(-) delete mode 100644 app/javascript/flavours/glitch/features/filters/added_to_filter.js create mode 100644 app/javascript/flavours/glitch/features/filters/added_to_filter.jsx delete mode 100644 app/javascript/flavours/glitch/features/filters/select_filter.js create mode 100644 app/javascript/flavours/glitch/features/filters/select_filter.jsx (limited to 'app/javascript/flavours/glitch/features/filters') diff --git a/app/javascript/flavours/glitch/features/filters/added_to_filter.js b/app/javascript/flavours/glitch/features/filters/added_to_filter.js deleted file mode 100644 index becb170cd..000000000 --- a/app/javascript/flavours/glitch/features/filters/added_to_filter.js +++ /dev/null @@ -1,102 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import { FormattedMessage } from 'react-intl'; -import { toServerSideType } from 'flavours/glitch/utils/filters'; -import Button from 'flavours/glitch/components/button'; -import { connect } from 'react-redux'; - -const mapStateToProps = (state, { filterId }) => ({ - filter: state.getIn(['filters', filterId]), -}); - -export default @connect(mapStateToProps) -class AddedToFilter extends React.PureComponent { - - static propTypes = { - onClose: PropTypes.func.isRequired, - contextType: PropTypes.string, - filter: ImmutablePropTypes.map.isRequired, - dispatch: PropTypes.func.isRequired, - }; - - handleCloseClick = () => { - const { onClose } = this.props; - onClose(); - }; - - render () { - const { filter, contextType } = this.props; - - let expiredMessage = null; - if (filter.get('expires_at') && filter.get('expires_at') < new Date()) { - expiredMessage = ( - -

-

- -

-
- ); - } - - let contextMismatchMessage = null; - if (contextType && !filter.get('context').includes(toServerSideType(contextType))) { - contextMismatchMessage = ( - -

-

- -

-
- ); - } - - const settings_link = ( - - - - ); - - return ( - -

-

- -

- - {expiredMessage} - {contextMismatchMessage} - -

-

- -

- -
- -
- -
- - ); - } - -} diff --git a/app/javascript/flavours/glitch/features/filters/added_to_filter.jsx b/app/javascript/flavours/glitch/features/filters/added_to_filter.jsx new file mode 100644 index 000000000..becb170cd --- /dev/null +++ b/app/javascript/flavours/glitch/features/filters/added_to_filter.jsx @@ -0,0 +1,102 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import { FormattedMessage } from 'react-intl'; +import { toServerSideType } from 'flavours/glitch/utils/filters'; +import Button from 'flavours/glitch/components/button'; +import { connect } from 'react-redux'; + +const mapStateToProps = (state, { filterId }) => ({ + filter: state.getIn(['filters', filterId]), +}); + +export default @connect(mapStateToProps) +class AddedToFilter extends React.PureComponent { + + static propTypes = { + onClose: PropTypes.func.isRequired, + contextType: PropTypes.string, + filter: ImmutablePropTypes.map.isRequired, + dispatch: PropTypes.func.isRequired, + }; + + handleCloseClick = () => { + const { onClose } = this.props; + onClose(); + }; + + render () { + const { filter, contextType } = this.props; + + let expiredMessage = null; + if (filter.get('expires_at') && filter.get('expires_at') < new Date()) { + expiredMessage = ( + +

+

+ +

+
+ ); + } + + let contextMismatchMessage = null; + if (contextType && !filter.get('context').includes(toServerSideType(contextType))) { + contextMismatchMessage = ( + +

+

+ +

+
+ ); + } + + const settings_link = ( + + + + ); + + return ( + +

+

+ +

+ + {expiredMessage} + {contextMismatchMessage} + +

+

+ +

+ +
+ +
+ +
+ + ); + } + +} diff --git a/app/javascript/flavours/glitch/features/filters/select_filter.js b/app/javascript/flavours/glitch/features/filters/select_filter.js deleted file mode 100644 index 57adb59cc..000000000 --- a/app/javascript/flavours/glitch/features/filters/select_filter.js +++ /dev/null @@ -1,192 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { connect } from 'react-redux'; -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; -import { toServerSideType } from 'flavours/glitch/utils/filters'; -import { loupeIcon, deleteIcon } from 'flavours/glitch/utils/icons'; -import Icon from 'flavours/glitch/components/icon'; -import fuzzysort from 'fuzzysort'; - -const messages = defineMessages({ - search: { id: 'filter_modal.select_filter.search', defaultMessage: 'Search or create' }, - clear: { id: 'emoji_button.clear', defaultMessage: 'Clear' }, -}); - -const mapStateToProps = (state, { contextType }) => ({ - filters: Array.from(state.get('filters').values()).map((filter) => [ - filter.get('id'), - filter.get('title'), - filter.get('keywords')?.map((keyword) => keyword.get('keyword')).join('\n'), - filter.get('expires_at') && filter.get('expires_at') < new Date(), - contextType && !filter.get('context').includes(toServerSideType(contextType)), - ]), -}); - -export default @connect(mapStateToProps) -@injectIntl -class SelectFilter extends React.PureComponent { - - static propTypes = { - onSelectFilter: PropTypes.func.isRequired, - onNewFilter: PropTypes.func.isRequired, - filters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.object)), - intl: PropTypes.object.isRequired, - }; - - state = { - searchValue: '', - }; - - search () { - const { filters } = this.props; - const { searchValue } = this.state; - - if (searchValue === '') { - return filters; - } - - return fuzzysort.go(searchValue, filters, { - keys: ['1', '2'], - limit: 5, - threshold: -10000, - }).map(result => result.obj); - } - - renderItem = filter => { - let warning = null; - if (filter[3] || filter[4]) { - warning = ( - - ( - {filter[3] && } - {filter[3] && filter[4] && ', '} - {filter[4] && } - ) - - ); - } - - return ( -
- {filter[1]} {warning} -
- ); - }; - - renderCreateNew (name) { - return ( -
- -
- ); - } - - handleSearchChange = ({ target }) => { - this.setState({ searchValue: target.value }); - }; - - setListRef = c => { - this.listNode = c; - }; - - handleKeyDown = e => { - const index = Array.from(this.listNode.childNodes).findIndex(node => node === e.currentTarget); - - let element = null; - - switch(e.key) { - case ' ': - case 'Enter': - e.currentTarget.click(); - break; - case 'ArrowDown': - element = this.listNode.childNodes[index + 1] || this.listNode.firstChild; - break; - case 'ArrowUp': - element = this.listNode.childNodes[index - 1] || this.listNode.lastChild; - break; - case 'Tab': - if (e.shiftKey) { - element = this.listNode.childNodes[index - 1] || this.listNode.lastChild; - } else { - element = this.listNode.childNodes[index + 1] || this.listNode.firstChild; - } - break; - case 'Home': - element = this.listNode.firstChild; - break; - case 'End': - element = this.listNode.lastChild; - break; - } - - if (element) { - element.focus(); - e.preventDefault(); - e.stopPropagation(); - } - }; - - handleSearchKeyDown = e => { - let element = null; - - switch(e.key) { - case 'Tab': - case 'ArrowDown': - element = this.listNode.firstChild; - - if (element) { - element.focus(); - e.preventDefault(); - e.stopPropagation(); - } - - break; - } - }; - - handleClear = () => { - this.setState({ searchValue: '' }); - }; - - handleItemClick = e => { - const value = e.currentTarget.getAttribute('data-index'); - - e.preventDefault(); - - this.props.onSelectFilter(value); - }; - - handleNewFilterClick = e => { - e.preventDefault(); - - this.props.onNewFilter(this.state.searchValue); - }; - - render () { - const { intl } = this.props; - - const { searchValue } = this.state; - const isSearching = searchValue !== ''; - const results = this.search(); - - return ( - -

-

- -
- - -
- -
- {results.map(this.renderItem)} - {isSearching && this.renderCreateNew(searchValue) } -
- -
- ); - } - -} diff --git a/app/javascript/flavours/glitch/features/filters/select_filter.jsx b/app/javascript/flavours/glitch/features/filters/select_filter.jsx new file mode 100644 index 000000000..57adb59cc --- /dev/null +++ b/app/javascript/flavours/glitch/features/filters/select_filter.jsx @@ -0,0 +1,192 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { connect } from 'react-redux'; +import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; +import { toServerSideType } from 'flavours/glitch/utils/filters'; +import { loupeIcon, deleteIcon } from 'flavours/glitch/utils/icons'; +import Icon from 'flavours/glitch/components/icon'; +import fuzzysort from 'fuzzysort'; + +const messages = defineMessages({ + search: { id: 'filter_modal.select_filter.search', defaultMessage: 'Search or create' }, + clear: { id: 'emoji_button.clear', defaultMessage: 'Clear' }, +}); + +const mapStateToProps = (state, { contextType }) => ({ + filters: Array.from(state.get('filters').values()).map((filter) => [ + filter.get('id'), + filter.get('title'), + filter.get('keywords')?.map((keyword) => keyword.get('keyword')).join('\n'), + filter.get('expires_at') && filter.get('expires_at') < new Date(), + contextType && !filter.get('context').includes(toServerSideType(contextType)), + ]), +}); + +export default @connect(mapStateToProps) +@injectIntl +class SelectFilter extends React.PureComponent { + + static propTypes = { + onSelectFilter: PropTypes.func.isRequired, + onNewFilter: PropTypes.func.isRequired, + filters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.object)), + intl: PropTypes.object.isRequired, + }; + + state = { + searchValue: '', + }; + + search () { + const { filters } = this.props; + const { searchValue } = this.state; + + if (searchValue === '') { + return filters; + } + + return fuzzysort.go(searchValue, filters, { + keys: ['1', '2'], + limit: 5, + threshold: -10000, + }).map(result => result.obj); + } + + renderItem = filter => { + let warning = null; + if (filter[3] || filter[4]) { + warning = ( + + ( + {filter[3] && } + {filter[3] && filter[4] && ', '} + {filter[4] && } + ) + + ); + } + + return ( +
+ {filter[1]} {warning} +
+ ); + }; + + renderCreateNew (name) { + return ( +
+ +
+ ); + } + + handleSearchChange = ({ target }) => { + this.setState({ searchValue: target.value }); + }; + + setListRef = c => { + this.listNode = c; + }; + + handleKeyDown = e => { + const index = Array.from(this.listNode.childNodes).findIndex(node => node === e.currentTarget); + + let element = null; + + switch(e.key) { + case ' ': + case 'Enter': + e.currentTarget.click(); + break; + case 'ArrowDown': + element = this.listNode.childNodes[index + 1] || this.listNode.firstChild; + break; + case 'ArrowUp': + element = this.listNode.childNodes[index - 1] || this.listNode.lastChild; + break; + case 'Tab': + if (e.shiftKey) { + element = this.listNode.childNodes[index - 1] || this.listNode.lastChild; + } else { + element = this.listNode.childNodes[index + 1] || this.listNode.firstChild; + } + break; + case 'Home': + element = this.listNode.firstChild; + break; + case 'End': + element = this.listNode.lastChild; + break; + } + + if (element) { + element.focus(); + e.preventDefault(); + e.stopPropagation(); + } + }; + + handleSearchKeyDown = e => { + let element = null; + + switch(e.key) { + case 'Tab': + case 'ArrowDown': + element = this.listNode.firstChild; + + if (element) { + element.focus(); + e.preventDefault(); + e.stopPropagation(); + } + + break; + } + }; + + handleClear = () => { + this.setState({ searchValue: '' }); + }; + + handleItemClick = e => { + const value = e.currentTarget.getAttribute('data-index'); + + e.preventDefault(); + + this.props.onSelectFilter(value); + }; + + handleNewFilterClick = e => { + e.preventDefault(); + + this.props.onNewFilter(this.state.searchValue); + }; + + render () { + const { intl } = this.props; + + const { searchValue } = this.state; + const isSearching = searchValue !== ''; + const results = this.search(); + + return ( + +

+

+ +
+ + +
+ +
+ {results.map(this.renderItem)} + {isSearching && this.renderCreateNew(searchValue) } +
+ +
+ ); + } + +} -- cgit