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 --- .../components/conversations_list.jsx | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 app/javascript/flavours/glitch/features/direct_timeline/components/conversations_list.jsx (limited to 'app/javascript/flavours/glitch/features/direct_timeline/components/conversations_list.jsx') diff --git a/app/javascript/flavours/glitch/features/direct_timeline/components/conversations_list.jsx b/app/javascript/flavours/glitch/features/direct_timeline/components/conversations_list.jsx new file mode 100644 index 000000000..ae72179e2 --- /dev/null +++ b/app/javascript/flavours/glitch/features/direct_timeline/components/conversations_list.jsx @@ -0,0 +1,75 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import ConversationContainer from '../containers/conversation_container'; +import ScrollableList from 'flavours/glitch/components/scrollable_list'; +import { debounce } from 'lodash'; + +export default class ConversationsList extends ImmutablePureComponent { + + static propTypes = { + conversations: ImmutablePropTypes.list.isRequired, + scrollKey: PropTypes.string.isRequired, + hasMore: PropTypes.bool, + isLoading: PropTypes.bool, + onLoadMore: PropTypes.func, + }; + + getCurrentIndex = id => this.props.conversations.findIndex(x => x.get('id') === id); + + handleMoveUp = id => { + const elementIndex = this.getCurrentIndex(id) - 1; + this._selectChild(elementIndex, true); + }; + + handleMoveDown = id => { + const elementIndex = this.getCurrentIndex(id) + 1; + this._selectChild(elementIndex, false); + }; + + _selectChild (index, align_top) { + const container = this.node.node; + const element = container.querySelector(`article:nth-of-type(${index + 1}) .focusable`); + + if (element) { + if (align_top && container.scrollTop > element.offsetTop) { + element.scrollIntoView(true); + } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) { + element.scrollIntoView(false); + } + element.focus(); + } + } + + setRef = c => { + this.node = c; + }; + + handleLoadOlder = debounce(() => { + const last = this.props.conversations.last(); + + if (last && last.get('last_status')) { + this.props.onLoadMore(last.get('last_status')); + } + }, 300, { leading: true }); + + render () { + const { conversations, onLoadMore, ...other } = this.props; + + return ( + + {conversations.map(item => ( + + ))} + + ); + } + +} -- cgit From 53cdcce3d141f7c6e7328041ef2bb5e298931de3 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Fri, 7 Apr 2023 15:44:31 +0200 Subject: [Glitch] Fix loading spinner + infinite scroll for private mentions Port 9ef9974ff207fe91291c81c7a9b9bb83e0df8e16 to glitch-soc Signed-off-by: Claire --- .../glitch/features/direct_timeline/components/conversations_list.jsx | 4 ++-- app/javascript/flavours/glitch/features/direct_timeline/index.jsx | 4 ++++ app/javascript/flavours/glitch/styles/components/columns.scss | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) (limited to 'app/javascript/flavours/glitch/features/direct_timeline/components/conversations_list.jsx') diff --git a/app/javascript/flavours/glitch/features/direct_timeline/components/conversations_list.jsx b/app/javascript/flavours/glitch/features/direct_timeline/components/conversations_list.jsx index ae72179e2..2bfe6fbf1 100644 --- a/app/javascript/flavours/glitch/features/direct_timeline/components/conversations_list.jsx +++ b/app/javascript/flavours/glitch/features/direct_timeline/components/conversations_list.jsx @@ -55,10 +55,10 @@ export default class ConversationsList extends ImmutablePureComponent { }, 300, { leading: true }); render () { - const { conversations, onLoadMore, ...other } = this.props; + const { conversations, isLoading, onLoadMore, ...other } = this.props; return ( - + {conversations.map(item => ( } + alwaysPrepend emptyMessage={} /> ); @@ -119,8 +121,10 @@ class DirectTimeline extends React.PureComponent { trackScroll={!pinned} scrollKey={`direct_timeline-${columnId}`} timelineId='direct' + bindToDocument={!multiColumn} onLoadMore={this.handleLoadMoreTimeline} prepend={
} + alwaysPrepend emptyMessage={} /> ); diff --git a/app/javascript/flavours/glitch/styles/components/columns.scss b/app/javascript/flavours/glitch/styles/components/columns.scss index fd4bb95b5..907f820d6 100644 --- a/app/javascript/flavours/glitch/styles/components/columns.scss +++ b/app/javascript/flavours/glitch/styles/components/columns.scss @@ -650,6 +650,7 @@ $ui-header-height: 55px; .follow_requests-unlocked_explanation { background: darken($ui-base-color, 4%); contain: initial; + flex-grow: 0; } .error-column { -- cgit