diff --git a/src/Cell.js b/src/Cell.js
index a26fd3c0..cdaa7e76 100644
--- a/src/Cell.js
+++ b/src/Cell.js
@@ -18,6 +18,7 @@ const Cell = React.memo((props) => {
requestUnloadedSkin,
permalinkUrl,
concentsToNsfw,
+ doesNotConcentToNsfw,
showNsfw,
} = props;
const { width, height } = data;
@@ -58,6 +59,7 @@ const Cell = React.memo((props) => {
// TODO: This is werid because there is an implicit assumption that this is always avaliable if we have the skin
permalink={permalinkUrl}
concentsToNsfw={concentsToNsfw}
+ doesNotConcentToNsfw={doesNotConcentToNsfw}
showNsfw={showNsfw}
/>
);
@@ -91,7 +93,11 @@ const mapDispatchToProps = (dispatch) => ({
dispatch(Actions.selectedSkin(hash, position));
},
concentsToNsfw() {
- dispatch(Actions.concentsToNswf());
+ dispatch(Actions.concentsToNsfw());
+ },
+
+ doesNotConcentToNsfw() {
+ dispatch(Actions.doesNotConcentToNsfw());
},
});
export default connect(mapStateToProps, mapDispatchToProps)(Cell);
diff --git a/src/UploadGrid.js b/src/UploadGrid.js
index 224fb5b1..d583e390 100644
--- a/src/UploadGrid.js
+++ b/src/UploadGrid.js
@@ -4,6 +4,7 @@ import { HEADING_HEIGHT } from "./constants";
import { useActionCreator } from "./hooks";
import * as Actions from "./redux/actionCreators";
import * as Selectors from "./redux/selectors";
+import * as Utils from "./utils";
function UploadRow({ file }) {
const tryToUploadFile = useActionCreator(Actions.tryToUploadFile);
@@ -44,6 +45,15 @@ function UploadRow({ file }) {
{getStatus()} |
{file.file.name} |
{file.status} |
+
+ {(file.status === "FOUND" || file.status === "ARCHIVED") && (
+
+ )}
+ |
);
}
diff --git a/src/components/Skin.js b/src/components/Skin.js
index dd1b25ee..649f8f37 100644
--- a/src/components/Skin.js
+++ b/src/components/Skin.js
@@ -14,6 +14,7 @@ function Skin({
fileName,
nsfw,
concentsToNsfw,
+ doesNotConcentToNsfw,
showNsfw,
}) {
const [loaded, setLoaded] = useState(false);
@@ -28,6 +29,7 @@ function Skin({
)
) {
e.preventDefault();
+ doesNotConcentToNsfw();
return;
} else {
concentsToNsfw();
@@ -44,7 +46,15 @@ function Skin({
selectSkin(hash, { top, left });
}
},
- [concentsToNsfw, hash, nsfw, ref, selectSkin, showNsfw]
+ [
+ concentsToNsfw,
+ doesNotConcentToNsfw,
+ hash,
+ nsfw,
+ ref,
+ selectSkin,
+ showNsfw,
+ ]
);
const imgStyle = {
diff --git a/src/redux/actionCreators.js b/src/redux/actionCreators.js
index e24f4044..da8cd21c 100644
--- a/src/redux/actionCreators.js
+++ b/src/redux/actionCreators.js
@@ -26,10 +26,14 @@ export function loadedSkinZip(zip) {
return { type: "LOADED_SKIN_ZIP", zip };
}
-export function concentsToNswf() {
+export function concentsToNsfw() {
return { type: "CONCENTS_TO_NSFW" };
}
+export function doesNotConcentToNsfw() {
+ return { type: "DOES_NOT_CONCENT_TO_NSFW" };
+}
+
export function toggleUploadView() {
return { type: "TOGGLE_UPLOAD_VIEW" };
}
diff --git a/src/redux/epics.js b/src/redux/epics.js
index b1bd57f5..0d7e4cdb 100644
--- a/src/redux/epics.js
+++ b/src/redux/epics.js
@@ -4,12 +4,15 @@ import * as Actions from "./actionCreators";
import * as Selectors from "./selectors";
import * as Utils from "../utils";
import {
+ tap,
filter,
switchMap,
map,
mergeMap,
takeUntil,
catchError,
+ ignoreElements,
+ delay,
} from "rxjs/operators";
import { search } from "../algolia";
import queryParser from "../queryParser";
@@ -264,9 +267,7 @@ function uploadActions(file) {
return concat(
of(Actions.startingFileUpload(file.id)),
from(UploadUtils.upload(file.file)).pipe(
- map((response) => {
- return Actions.archivedSkin(file.id, response);
- }),
+ map((response) => Actions.archivedSkin(file.id, response)),
catchError(() => of(Actions.uploadFailed(file.id)))
)
);
@@ -300,6 +301,33 @@ const uploadAllFilesEpic = (actions, state) =>
})
);
+const loggingEpic = (actions, state) =>
+ actions.pipe(
+ tap((action) => {
+ // ga('send', 'event', [eventCategory], [eventAction], [eventLabel], [eventValue], [fieldsObject]);
+ switch (action.type) {
+ case "CONCENTS_TO_N_SFW":
+ case "DOES_NOT_CONCENT_TO_NSFW":
+ case "CLOSE_UPLOAD_FILES":
+ case "GOT_FILE_MD5":
+ case "ARCHIVED_SKIN":
+ case "TRY_TO_UPLOAD_FILE":
+ case "UPLOAD_FAILED":
+ case "STARTING_FILE_UPLOAD":
+ case "TRY_TO_UPLOAD_ALL_FILES":
+ case "INVALID_FILE_EXTENSION":
+ case "GOT_FILE":
+ case "NOT_CLASSIC_SKIN":
+ case "GOT_MISSING_AND_FOUND_MD5S":
+ window.ga("send", "event", "redux", action.type);
+ break;
+ default: {
+ }
+ }
+ }),
+ ignoreElements()
+ );
+
export default combineEpics(
searchEpic,
urlChangedEpic,
@@ -314,5 +342,6 @@ export default combineEpics(
uploadFilesEpic,
uploadAllFilesEpic,
uploadSingleFileEpic,
- checkIfUploadsAreMissingEpic
+ checkIfUploadsAreMissingEpic,
+ loggingEpic
);
diff --git a/src/utils.js b/src/utils.js
index 1c228653..04b38f97 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -1,4 +1,5 @@
import { SKIN_CDN, SCREENSHOT_CDN } from "./constants";
+
export function screenshotUrlFromHash(hash) {
return `${SCREENSHOT_CDN}/screenshots/${hash}.png`;
}