mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-11-21 13:57:57 -05:00
59 lines
2.2 KiB
JavaScript
59 lines
2.2 KiB
JavaScript
import React, { useState, useEffect } from 'react';
|
|
import { TextsContext } from '../../utils/contexts/';
|
|
import { MediaPageStore } from '../../utils/stores/';
|
|
import { formatViewsNumber } from '../../utils/helpers/';
|
|
import { PageActions, MediaPageActions } from '../../utils/actions/';
|
|
import { CircleIconButton, MaterialIcon } from '../_shared/';
|
|
|
|
export function MediaDislikeIcon() {
|
|
const [dislikedMedia, setDislikedMedia] = useState(MediaPageStore.get('user-disliked-media'));
|
|
const [dislikesCounter, setDislikesCounter] = useState(formatViewsNumber(MediaPageStore.get('media-dislikes'), false));
|
|
|
|
function updateStateValues() {
|
|
setDislikedMedia(MediaPageStore.get('user-disliked-media'));
|
|
setDislikesCounter(formatViewsNumber(MediaPageStore.get('media-dislikes'), false));
|
|
}
|
|
|
|
function onCompleteMediaDislike() {
|
|
updateStateValues();
|
|
PageActions.addNotification(TextsContext._currentValue.messages.addToDisliked, 'mediaDislike');
|
|
}
|
|
|
|
function onCompleteMediaDislikeCancel() {
|
|
updateStateValues();
|
|
PageActions.addNotification(TextsContext._currentValue.messages.removeFromDisliked, 'cancelMediaDislike');
|
|
}
|
|
|
|
function onFailMediaDislikeRequest() {
|
|
PageActions.addNotification('Action failed', 'mediaDislikeRequestFail');
|
|
}
|
|
|
|
function toggleDislike(ev) {
|
|
ev.preventDefault();
|
|
ev.stopPropagation();
|
|
MediaPageActions[dislikedMedia ? 'undislikeMedia' : 'dislikeMedia']();
|
|
}
|
|
|
|
useEffect(() => {
|
|
MediaPageStore.on('disliked_media', onCompleteMediaDislike);
|
|
MediaPageStore.on('undisliked_media', onCompleteMediaDislikeCancel);
|
|
MediaPageStore.on('disliked_media_failed_request', onFailMediaDislikeRequest);
|
|
return () => {
|
|
MediaPageStore.removeListener('disliked_media', onCompleteMediaDislike);
|
|
MediaPageStore.removeListener('undisliked_media', onCompleteMediaDislikeCancel);
|
|
MediaPageStore.removeListener('disliked_media_failed_request', onFailMediaDislikeRequest);
|
|
};
|
|
}, []);
|
|
|
|
return (
|
|
<div className="like">
|
|
<button onClick={toggleDislike}>
|
|
<CircleIconButton type="span">
|
|
<MaterialIcon type="thumb_down" />
|
|
</CircleIconButton>
|
|
<span className="dislikes-counter">{dislikesCounter}</span>
|
|
</button>
|
|
</div>
|
|
);
|
|
}
|