From 0e9835f3cf944fbc17f71c44328ed39790c983cd Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Fri, 31 Dec 2021 00:42:42 -0500 Subject: [PATCH] error messages --- .../TtsEditCategoriesPage.tsx | 80 +++++++++++-------- 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/fakeyou/src/v2/view/tts/tts_edit_categories/TtsEditCategoriesPage.tsx b/fakeyou/src/v2/view/tts/tts_edit_categories/TtsEditCategoriesPage.tsx index b8b6bc181d..7cb7db87de 100644 --- a/fakeyou/src/v2/view/tts/tts_edit_categories/TtsEditCategoriesPage.tsx +++ b/fakeyou/src/v2/view/tts/tts_edit_categories/TtsEditCategoriesPage.tsx @@ -1,12 +1,14 @@ import React, { useState, useEffect, useCallback } from 'react'; -import { SessionWrapper } from '../../../../session/SessionWrapper'; -import { useParams, useHistory } from 'react-router-dom'; -import { FrontendUrlConfig } from '../../../../common/FrontendUrlConfig'; -import { BackLink } from '../../_common/BackLink'; -import { GetTtsModel, GetTtsModelIsErr, GetTtsModelIsOk, TtsModel, TtsModelLookupError } from '../../../api/tts/GetTtsModel'; -import { ListTtsCategoriesForModel, ListTtsCategoriesForModelIsError, ListTtsCategoriesForModelIsOk, TtsModelCategory } from '../../../api/category/ListTtsCategoriesForModel'; -import { ListTtsCategories, ListTtsCategoriesIsError, ListTtsCategoriesIsOk, TtsCategory } from '../../../api/category/ListTtsCategories'; import { AssignTtsCategory, AssignTtsCategoryIsError, AssignTtsCategoryIsOk } from '../../../api/category/AssignTtsCategory'; +import { BackLink } from '../../_common/BackLink'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { FrontendUrlConfig } from '../../../../common/FrontendUrlConfig'; +import { GetTtsModel, GetTtsModelIsErr, GetTtsModelIsOk, TtsModel, TtsModelLookupError } from '../../../api/tts/GetTtsModel'; +import { ListTtsCategories, ListTtsCategoriesIsError, ListTtsCategoriesIsOk, TtsCategory } from '../../../api/category/ListTtsCategories'; +import { ListTtsCategoriesForModel, ListTtsCategoriesForModelIsError, ListTtsCategoriesForModelIsOk, TtsModelCategory } from '../../../api/category/ListTtsCategoriesForModel'; +import { SessionWrapper } from '../../../../session/SessionWrapper'; +import { faMinusCircle } from '@fortawesome/free-solid-svg-icons'; +import { useParams } from 'react-router-dom'; interface Props { sessionWrapper: SessionWrapper, @@ -15,14 +17,14 @@ interface Props { function TtsEditCategoriesPage(props: Props) { let { token } = useParams() as { token : string }; - const history = useHistory(); - const [ttsModel, setTtsModel] = useState(undefined); const [notFoundState, setNotFoundState] = useState(false); const [allTtsCategories, setAllTtsCategories] = useState([]); const [assignedCategories, setAssignedCategories] = useState([]); + const [errorMessage, setErrorMessage] = useState(undefined); + const getModel = useCallback(async (token) => { const model = await GetTtsModel(token); @@ -43,7 +45,7 @@ function TtsEditCategoriesPage(props: Props) { if (ListTtsCategoriesIsOk(categoryList)) { setAllTtsCategories(categoryList.categories); } else if (ListTtsCategoriesIsError(categoryList)) { - // TODO: Improve + setErrorMessage("error listing all categories"); } }, []); @@ -53,7 +55,7 @@ function TtsEditCategoriesPage(props: Props) { if (ListTtsCategoriesForModelIsOk(categoryList)) { setAssignedCategories(categoryList.categories); } else if (ListTtsCategoriesForModelIsError(categoryList)) { - // TODO: Improve + setErrorMessage("error listing categories for model"); } }, []); @@ -74,9 +76,7 @@ function TtsEditCategoriesPage(props: Props) { return
} - const handleAddCategory = async (ev: React.FormEvent) => { - const categoryToken = (ev.target as HTMLSelectElement).value; - + const assignCategory = async (categoryToken: string, assign: boolean) => { if (categoryToken === '') { return; // Default dropdown option is a no-op } @@ -84,32 +84,27 @@ function TtsEditCategoriesPage(props: Props) { const assignRequest = { category_token: categoryToken, tts_model_token: token, - assign: true, + assign: assign, }; const result = await AssignTtsCategory(assignRequest); if (AssignTtsCategoryIsOk(result)) { + setErrorMessage(undefined); listTtsCategoriesForModel(token); // Reload } else if (AssignTtsCategoryIsError(result)) { - // TODO: Improve + const action = assign ? "adding" : "removing"; + setErrorMessage(`error ${action} category`); } } + const handleAddCategory = async (ev: React.FormEvent) => { + const categoryToken = (ev.target as HTMLSelectElement).value; + await assignCategory(categoryToken, true); + } + const handleRemoveCategory = async (categoryToken: string) => { - const assignRequest = { - category_token: categoryToken, - tts_model_token: token, - assign: false, - }; - - const result = await AssignTtsCategory(assignRequest); - - if (AssignTtsCategoryIsOk(result)) { - listTtsCategoriesForModel(token); // Reload - } else if (AssignTtsCategoryIsError(result)) { - // TODO: Improve - } + await assignCategory(categoryToken, false); } const modelLink = FrontendUrlConfig.ttsModelPage(token); @@ -129,9 +124,12 @@ function TtsEditCategoriesPage(props: Props) { {assignedCategories.map(category => { return (
  • - {category.name} - [edit category] - [ handleRemoveCategory(category.category_token)}>remove] + {category.name} +   + [ handleRemoveCategory(category.category_token)}> + remove  + + ]
  • ); })} @@ -149,11 +147,27 @@ function TtsEditCategoriesPage(props: Props) { ) }); + let errorFlash = <>; + + if (!!errorMessage) { + errorFlash = ( + <> +
    +
    + {errorMessage} +
    +
    + + ); + } + return (

    Edit Categories

    TTS Model: {ttsModel.title}

    + {errorFlash} +

    @@ -174,6 +188,8 @@ function TtsEditCategoriesPage(props: Props) {
    +
    +