Merge pull request #1268 from ThibG/glitch-soc/merge-upstream

Merge upstream changes
This commit is contained in:
ThibG 2020-01-25 20:31:22 +01:00 committed by GitHub
commit 3591621edc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 68 additions and 20 deletions

View file

@ -56,12 +56,27 @@ export const updateAnnouncements = announcement => ({
}); });
export const addReaction = (announcementId, name) => (dispatch, getState) => { export const addReaction = (announcementId, name) => (dispatch, getState) => {
dispatch(addReactionRequest(announcementId, name)); const announcement = getState().getIn(['announcements', 'items']).find(x => x.get('id') === announcementId);
let alreadyAdded = false;
if (announcement) {
const reaction = announcement.get('reactions').find(x => x.get('name') === name);
if (reaction && reaction.get('me')) {
alreadyAdded = true;
}
}
if (!alreadyAdded) {
dispatch(addReactionRequest(announcementId, name, alreadyAdded));
}
api(getState).put(`/api/v1/announcements/${announcementId}/reactions/${name}`).then(() => { api(getState).put(`/api/v1/announcements/${announcementId}/reactions/${name}`).then(() => {
dispatch(addReactionSuccess(announcementId, name)); dispatch(addReactionSuccess(announcementId, name, alreadyAdded));
}).catch(err => { }).catch(err => {
dispatch(addReactionFail(announcementId, name, err)); if (!alreadyAdded) {
dispatch(addReactionFail(announcementId, name, err));
}
}); });
}; };

View file

@ -42,6 +42,7 @@ class ColumnHeader extends React.PureComponent {
onMove: PropTypes.func, onMove: PropTypes.func,
onClick: PropTypes.func, onClick: PropTypes.func,
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,
appendContent: PropTypes.node,
}; };
state = { state = {
@ -106,7 +107,7 @@ class ColumnHeader extends React.PureComponent {
} }
render () { render () {
const { intl, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, notifCleaning, notifCleaningActive, placeholder } = this.props; const { intl, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, notifCleaning, notifCleaningActive, placeholder, appendContent } = this.props;
const { collapsed, animating, animatingNCD } = this.state; const { collapsed, animating, animatingNCD } = this.state;
let title = this.props.title; let title = this.props.title;
@ -229,6 +230,8 @@ class ColumnHeader extends React.PureComponent {
{(!collapsed || animating) && collapsedContent} {(!collapsed || animating) && collapsedContent}
</div> </div>
</div> </div>
{appendContent}
</div> </div>
); );

View file

@ -142,12 +142,11 @@ class HomeTimeline extends React.PureComponent {
pinned={pinned} pinned={pinned}
multiColumn={multiColumn} multiColumn={multiColumn}
extraButton={announcementsButton} extraButton={announcementsButton}
appendContent={hasAnnouncements && showAnnouncements && <AnnouncementsContainer />}
> >
<ColumnSettingsContainer /> <ColumnSettingsContainer />
</ColumnHeader> </ColumnHeader>
{hasAnnouncements && showAnnouncements && <AnnouncementsContainer />}
<StatusListContainer <StatusListContainer
trackScroll={!pinned} trackScroll={!pinned}
scrollKey={`home_timeline-${columnId}`} scrollKey={`home_timeline-${columnId}`}

View file

@ -38,7 +38,6 @@
.announcements { .announcements {
background: lighten($ui-base-color, 8%); background: lighten($ui-base-color, 8%);
border-top: 1px solid $ui-base-color;
font-size: 13px; font-size: 13px;
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;

View file

@ -224,13 +224,16 @@
.column-header__wrapper { .column-header__wrapper {
position: relative; position: relative;
flex: 0 0 auto; flex: 0 0 auto;
z-index: 1;
&.active { &.active {
box-shadow: 0 1px 0 rgba($highlight-text-color, 0.3);
&::before { &::before {
display: block; display: block;
content: ""; content: "";
position: absolute; position: absolute;
top: 35px; bottom: -13px;
left: 0; left: 0;
right: 0; right: 0;
margin: 0 auto; margin: 0 auto;
@ -241,6 +244,11 @@
background: radial-gradient(ellipse, rgba($ui-highlight-color, 0.23) 0%, rgba($ui-highlight-color, 0) 60%); background: radial-gradient(ellipse, rgba($ui-highlight-color, 0.23) 0%, rgba($ui-highlight-color, 0) 60%);
} }
} }
.announcements {
z-index: 1;
position: relative;
}
} }
.column-header { .column-header {
@ -273,8 +281,6 @@
} }
&.active { &.active {
box-shadow: 0 1px 0 rgba($ui-highlight-color, 0.3);
.column-header__icon { .column-header__icon {
color: $highlight-text-color; color: $highlight-text-color;
text-shadow: 0 0 10px rgba($ui-highlight-color, 0.4); text-shadow: 0 0 10px rgba($ui-highlight-color, 0.4);
@ -378,6 +384,8 @@
color: $darker-text-color; color: $darker-text-color;
transition: max-height 150ms ease-in-out, opacity 300ms linear; transition: max-height 150ms ease-in-out, opacity 300ms linear;
opacity: 1; opacity: 1;
z-index: 1;
position: relative;
&.collapsed { &.collapsed {
max-height: 0; max-height: 0;

View file

@ -56,12 +56,27 @@ export const updateAnnouncements = announcement => ({
}); });
export const addReaction = (announcementId, name) => (dispatch, getState) => { export const addReaction = (announcementId, name) => (dispatch, getState) => {
dispatch(addReactionRequest(announcementId, name)); const announcement = getState().getIn(['announcements', 'items']).find(x => x.get('id') === announcementId);
let alreadyAdded = false;
if (announcement) {
const reaction = announcement.get('reactions').find(x => x.get('name') === name);
if (reaction && reaction.get('me')) {
alreadyAdded = true;
}
}
if (!alreadyAdded) {
dispatch(addReactionRequest(announcementId, name, alreadyAdded));
}
api(getState).put(`/api/v1/announcements/${announcementId}/reactions/${name}`).then(() => { api(getState).put(`/api/v1/announcements/${announcementId}/reactions/${name}`).then(() => {
dispatch(addReactionSuccess(announcementId, name)); dispatch(addReactionSuccess(announcementId, name, alreadyAdded));
}).catch(err => { }).catch(err => {
dispatch(addReactionFail(announcementId, name, err)); if (!alreadyAdded) {
dispatch(addReactionFail(announcementId, name, err));
}
}); });
}; };

View file

@ -33,6 +33,7 @@ class ColumnHeader extends React.PureComponent {
onPin: PropTypes.func, onPin: PropTypes.func,
onMove: PropTypes.func, onMove: PropTypes.func,
onClick: PropTypes.func, onClick: PropTypes.func,
appendContent: PropTypes.node,
}; };
state = { state = {
@ -81,7 +82,7 @@ class ColumnHeader extends React.PureComponent {
} }
render () { render () {
const { title, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, placeholder } = this.props; const { title, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, placeholder, appendContent } = this.props;
const { collapsed, animating } = this.state; const { collapsed, animating } = this.state;
const wrapperClassName = classNames('column-header__wrapper', { const wrapperClassName = classNames('column-header__wrapper', {
@ -172,6 +173,8 @@ class ColumnHeader extends React.PureComponent {
{(!collapsed || animating) && collapsedContent} {(!collapsed || animating) && collapsedContent}
</div> </div>
</div> </div>
{appendContent}
</div> </div>
); );

View file

@ -143,12 +143,11 @@ class HomeTimeline extends React.PureComponent {
pinned={pinned} pinned={pinned}
multiColumn={multiColumn} multiColumn={multiColumn}
extraButton={announcementsButton} extraButton={announcementsButton}
appendContent={hasAnnouncements && showAnnouncements && <AnnouncementsContainer />}
> >
<ColumnSettingsContainer /> <ColumnSettingsContainer />
</ColumnHeader> </ColumnHeader>
{hasAnnouncements && showAnnouncements && <AnnouncementsContainer />}
<StatusListContainer <StatusListContainer
trackScroll={!pinned} trackScroll={!pinned}
scrollKey={`home_timeline-${columnId}`} scrollKey={`home_timeline-${columnId}`}

View file

@ -3224,13 +3224,16 @@ a.status-card.compact:hover {
.column-header__wrapper { .column-header__wrapper {
position: relative; position: relative;
flex: 0 0 auto; flex: 0 0 auto;
z-index: 1;
&.active { &.active {
box-shadow: 0 1px 0 rgba($highlight-text-color, 0.3);
&::before { &::before {
display: block; display: block;
content: ""; content: "";
position: absolute; position: absolute;
top: 35px; bottom: -13px;
left: 0; left: 0;
right: 0; right: 0;
margin: 0 auto; margin: 0 auto;
@ -3241,6 +3244,11 @@ a.status-card.compact:hover {
background: radial-gradient(ellipse, rgba($ui-highlight-color, 0.23) 0%, rgba($ui-highlight-color, 0) 60%); background: radial-gradient(ellipse, rgba($ui-highlight-color, 0.23) 0%, rgba($ui-highlight-color, 0) 60%);
} }
} }
.announcements {
z-index: 1;
position: relative;
}
} }
.column-header { .column-header {
@ -3273,8 +3281,6 @@ a.status-card.compact:hover {
} }
&.active { &.active {
box-shadow: 0 1px 0 rgba($highlight-text-color, 0.3);
.column-header__icon { .column-header__icon {
color: $highlight-text-color; color: $highlight-text-color;
text-shadow: 0 0 10px rgba($highlight-text-color, 0.4); text-shadow: 0 0 10px rgba($highlight-text-color, 0.4);
@ -3330,6 +3336,8 @@ a.status-card.compact:hover {
color: $darker-text-color; color: $darker-text-color;
transition: max-height 150ms ease-in-out, opacity 300ms linear; transition: max-height 150ms ease-in-out, opacity 300ms linear;
opacity: 1; opacity: 1;
z-index: 1;
position: relative;
&.collapsed { &.collapsed {
max-height: 0; max-height: 0;
@ -6632,7 +6640,6 @@ noscript {
.announcements { .announcements {
background: lighten($ui-base-color, 8%); background: lighten($ui-base-color, 8%);
border-top: 1px solid $ui-base-color;
font-size: 13px; font-size: 13px;
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;