From a29075e2086d0f2443a675eb55c99ff160714020 Mon Sep 17 00:00:00 2001 From: yonadavGit Date: Sat, 27 Jan 2024 22:20:07 +0200 Subject: [PATCH] feat(topic editor): dynamic review state - admins can mark prompts as reviewed --- static/js/Story.jsx | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/static/js/Story.jsx b/static/js/Story.jsx index 96d9042e18..fd8bbd0815 100644 --- a/static/js/Story.jsx +++ b/static/js/Story.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, {useState} from 'react'; import Sefaria from './sefaria/sefaria'; import PropTypes from 'prop-types'; import { @@ -127,7 +127,6 @@ StorySheetList.propTypes = { toggleSignUpModal: PropTypes.func }; function toCamelCase(str) { - console.log(str) return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(word, index) { return index === 0 ? word.toLowerCase() : word.toUpperCase(); }).replace(/\s+/g, ''); @@ -142,22 +141,21 @@ function capitalizeWords(str) { return result; } -const ReviewStateIndicator = ({reviewState}) => { +const ReviewStateIndicator = ({reviewState, callBack}) => { let comp = null; if (reviewState){ let reviewStateCamel = toCamelCase(reviewState); let reviewStateCapitalized = capitalizeWords(reviewState); let interfaceLanguage = Sefaria.interfaceLang; const lang = interfaceLanguage == "english" ? "en" : "he"; - comp =
+ comp =
{reviewStateCapitalized}
; } return comp - }; -const promptBuilder = ({text}) => { +const PromptWrapper = ({text}) => { let promptComponent = null; if (Sefaria.interfaceLang == "english"){ const isPromptPublished = text.descriptions?.en?.published @@ -177,27 +175,30 @@ const promptBuilder = ({text}) => { } return promptComponent } -const reviewIndicatorBuilder = ({text}) => { +const ReviewStateWrapper = ({text, callBack}) => { let reviewIndicatorComponent = null; if (Sefaria.interfaceLang == "english") { const isPromptPublished = text.descriptions?.en?.published if (isPromptPublished !== false || Sefaria.is_moderator) { reviewIndicatorComponent = - + } } else if (Sefaria.interfaceLang == "hebrew"){ const isPromptPublished = text.descriptions?.he?.published if (isPromptPublished !== false || Sefaria.is_moderator){ - reviewIndicatorComponent = + reviewIndicatorComponent = } } return reviewIndicatorComponent } +const ReviewIndicatorWrapper = ({reviewState, callBack}) => { + return ; +} const IntroducedTextPassage = ({text, topic, afterSave, toggleSignUpModal, bodyTextIsLink=false}) => { if (!text.ref) { return null; } - + console.log(text) const versions = text.versions || {} const params = Sefaria.util.getUrlVersionsParams(versions); const url = "/" + Sefaria.normRef(text.ref) + (params ? "?" + params : ""); @@ -207,15 +208,27 @@ const IntroducedTextPassage = ({text, topic, afterSave, toggleSignUpModal, bodyT let innerContent = ; const content = bodyTextIsLink ? {innerContent} : innerContent; - const promptComponent = promptBuilder({text}); - const reviewIndicatorComponent = reviewIndicatorBuilder({text}) + const [reviewState, setReviewState] = useState(text.descriptions?.en?.review_state); + const markReviewed = function(){ + console.log("markReviewed") + let lang = Sefaria.interfaceLang == "english" ? 'en' : 'he'; + let postData = {"topic": topic, "is_new": false, 'new_ref': text.ref, 'interface_lang': Sefaria.interfaceLang}; + postData.description = text.descriptions[lang] + postData.description["review_state"] = 'reviewed' + console.log(postData) + Sefaria.updateTopicRef(text.ref, postData).then(response => { + setReviewState("reviewed"); + }) + } + return ( - {reviewIndicatorComponent} + {/*{reviewIndicatorComponent}*/} + - {promptComponent} +