Improve 'item not found' pages (#3438)

* Make scene 'not found' page consistent
* Make backend response for no result consistent
This commit is contained in:
DingDongSoLong4
2023-02-16 01:12:01 +02:00
committed by GitHub
parent a1e7f8940b
commit 8437e10027
9 changed files with 54 additions and 35 deletions

View File

@@ -2,6 +2,8 @@ package api
import ( import (
"context" "context"
"database/sql"
"errors"
"strconv" "strconv"
"github.com/stashapp/stash/pkg/models" "github.com/stashapp/stash/pkg/models"
@@ -16,7 +18,7 @@ func (r *queryResolver) FindGallery(ctx context.Context, id string) (ret *models
if err := r.withReadTxn(ctx, func(ctx context.Context) error { if err := r.withReadTxn(ctx, func(ctx context.Context) error {
ret, err = r.repository.Gallery.Find(ctx, idInt) ret, err = r.repository.Gallery.Find(ctx, idInt)
return err return err
}); err != nil { }); err != nil && !errors.Is(err, sql.ErrNoRows) {
return nil, err return nil, err
} }

View File

@@ -2,6 +2,8 @@ package api
import ( import (
"context" "context"
"database/sql"
"errors"
"strconv" "strconv"
"github.com/99designs/gqlgen/graphql" "github.com/99designs/gqlgen/graphql"
@@ -23,7 +25,7 @@ func (r *queryResolver) FindImage(ctx context.Context, id *string, checksum *str
} }
image, err = qb.Find(ctx, idInt) image, err = qb.Find(ctx, idInt)
if err != nil { if err != nil && !errors.Is(err, sql.ErrNoRows) {
return err return err
} }
} else if checksum != nil { } else if checksum != nil {

View File

@@ -2,6 +2,8 @@ package api
import ( import (
"context" "context"
"database/sql"
"errors"
"strconv" "strconv"
"github.com/stashapp/stash/pkg/models" "github.com/stashapp/stash/pkg/models"
@@ -16,7 +18,7 @@ func (r *queryResolver) FindMovie(ctx context.Context, id string) (ret *models.M
if err := r.withReadTxn(ctx, func(ctx context.Context) error { if err := r.withReadTxn(ctx, func(ctx context.Context) error {
ret, err = r.repository.Movie.Find(ctx, idInt) ret, err = r.repository.Movie.Find(ctx, idInt)
return err return err
}); err != nil { }); err != nil && !errors.Is(err, sql.ErrNoRows) {
return nil, err return nil, err
} }
@@ -34,7 +36,6 @@ func (r *queryResolver) FindMovies(ctx context.Context, movieFilter *models.Movi
Count: total, Count: total,
Movies: movies, Movies: movies,
} }
return nil return nil
}); err != nil { }); err != nil {
return nil, err return nil, err

View File

@@ -2,6 +2,8 @@ package api
import ( import (
"context" "context"
"database/sql"
"errors"
"strconv" "strconv"
"github.com/stashapp/stash/pkg/models" "github.com/stashapp/stash/pkg/models"
@@ -16,7 +18,7 @@ func (r *queryResolver) FindPerformer(ctx context.Context, id string) (ret *mode
if err := r.withReadTxn(ctx, func(ctx context.Context) error { if err := r.withReadTxn(ctx, func(ctx context.Context) error {
ret, err = r.repository.Performer.Find(ctx, idInt) ret, err = r.repository.Performer.Find(ctx, idInt)
return err return err
}); err != nil { }); err != nil && !errors.Is(err, sql.ErrNoRows) {
return nil, err return nil, err
} }

View File

@@ -2,6 +2,8 @@ package api
import ( import (
"context" "context"
"database/sql"
"errors"
"strconv" "strconv"
"github.com/stashapp/stash/pkg/models" "github.com/stashapp/stash/pkg/models"
@@ -16,7 +18,7 @@ func (r *queryResolver) FindSavedFilter(ctx context.Context, id string) (ret *mo
if err := r.withReadTxn(ctx, func(ctx context.Context) error { if err := r.withReadTxn(ctx, func(ctx context.Context) error {
ret, err = r.repository.SavedFilter.Find(ctx, idInt) ret, err = r.repository.SavedFilter.Find(ctx, idInt)
return err return err
}); err != nil { }); err != nil && !errors.Is(err, sql.ErrNoRows) {
return nil, err return nil, err
} }
return ret, err return ret, err
@@ -40,7 +42,7 @@ func (r *queryResolver) FindDefaultFilter(ctx context.Context, mode models.Filte
if err := r.withReadTxn(ctx, func(ctx context.Context) error { if err := r.withReadTxn(ctx, func(ctx context.Context) error {
ret, err = r.repository.SavedFilter.FindDefault(ctx, mode) ret, err = r.repository.SavedFilter.FindDefault(ctx, mode)
return err return err
}); err != nil { }); err != nil && !errors.Is(err, sql.ErrNoRows) {
return nil, err return nil, err
} }
return ret, err return ret, err

View File

@@ -2,6 +2,8 @@ package api
import ( import (
"context" "context"
"database/sql"
"errors"
"strconv" "strconv"
"github.com/99designs/gqlgen/graphql" "github.com/99designs/gqlgen/graphql"
@@ -21,7 +23,7 @@ func (r *queryResolver) FindScene(ctx context.Context, id *string, checksum *str
return err return err
} }
scene, err = qb.Find(ctx, idInt) scene, err = qb.Find(ctx, idInt)
if err != nil { if err != nil && !errors.Is(err, sql.ErrNoRows) {
return err return err
} }
} else if checksum != nil { } else if checksum != nil {

View File

@@ -2,6 +2,8 @@ package api
import ( import (
"context" "context"
"database/sql"
"errors"
"strconv" "strconv"
"github.com/stashapp/stash/pkg/models" "github.com/stashapp/stash/pkg/models"
@@ -17,7 +19,7 @@ func (r *queryResolver) FindStudio(ctx context.Context, id string) (ret *models.
var err error var err error
ret, err = r.repository.Studio.Find(ctx, idInt) ret, err = r.repository.Studio.Find(ctx, idInt)
return err return err
}); err != nil { }); err != nil && !errors.Is(err, sql.ErrNoRows) {
return nil, err return nil, err
} }

View File

@@ -2,6 +2,8 @@ package api
import ( import (
"context" "context"
"database/sql"
"errors"
"strconv" "strconv"
"github.com/stashapp/stash/pkg/models" "github.com/stashapp/stash/pkg/models"
@@ -16,7 +18,7 @@ func (r *queryResolver) FindTag(ctx context.Context, id string) (ret *models.Tag
if err := r.withReadTxn(ctx, func(ctx context.Context) error { if err := r.withReadTxn(ctx, func(ctx context.Context) error {
ret, err = r.repository.Tag.Find(ctx, idInt) ret, err = r.repository.Tag.Find(ctx, idInt)
return err return err
}); err != nil { }); err != nil && !errors.Is(err, sql.ErrNoRows) {
return nil, err return nil, err
} }

View File

@@ -24,7 +24,12 @@ import {
queryFindScenesByID, queryFindScenesByID,
} from "src/core/StashService"; } from "src/core/StashService";
import Icon from "src/components/Shared/Icon"; import {
ErrorMessage,
LoadingIndicator,
Icon,
Counter,
} from "src/components/Shared";
import { useToast } from "src/hooks"; import { useToast } from "src/hooks";
import SceneQueue, { QueuedScene } from "src/models/sceneQueue"; import SceneQueue, { QueuedScene } from "src/models/sceneQueue";
import { ListFilterModel } from "src/models/list-filter/filter"; import { ListFilterModel } from "src/models/list-filter/filter";
@@ -58,7 +63,6 @@ const DeleteScenesDialog = lazy(() => import("../DeleteScenesDialog"));
const GenerateDialog = lazy(() => import("../../Dialogs/GenerateDialog")); const GenerateDialog = lazy(() => import("../../Dialogs/GenerateDialog"));
const SceneVideoFilterPanel = lazy(() => import("./SceneVideoFilterPanel")); const SceneVideoFilterPanel = lazy(() => import("./SceneVideoFilterPanel"));
import { objectPath, objectTitle } from "src/core/files"; import { objectPath, objectTitle } from "src/core/files";
import { Counter } from "src/components/Shared";
interface IProps { interface IProps {
scene: GQL.SceneDataFragment; scene: GQL.SceneDataFragment;
@@ -514,7 +518,7 @@ const SceneLoader: React.FC = () => {
const location = useLocation(); const location = useLocation();
const history = useHistory(); const history = useHistory();
const { configuration } = useContext(ConfigurationContext); const { configuration } = useContext(ConfigurationContext);
const { data, loading } = useFindScene(id ?? ""); const { data, loading, error } = useFindScene(id ?? "");
const queryParams = useMemo( const queryParams = useMemo(
() => queryString.parse(location.search, { decode: false }), () => queryString.parse(location.search, { decode: false }),
@@ -728,11 +732,14 @@ const SceneLoader: React.FC = () => {
} }
} }
if (loading) return <LoadingIndicator />;
if (error) return <ErrorMessage error={error.message} />;
const scene = data?.findScene; const scene = data?.findScene;
if (!scene) return <ErrorMessage error={`No scene found with id ${id}.`} />;
return ( return (
<div className="row"> <div className="row">
{!loading && scene ? (
<ScenePage <ScenePage
scene={scene} scene={scene}
setTimestamp={setTimestamp} setTimestamp={setTimestamp}
@@ -751,9 +758,6 @@ const SceneLoader: React.FC = () => {
setCollapsed={setCollapsed} setCollapsed={setCollapsed}
setContinuePlaylist={setContinuePlaylist} setContinuePlaylist={setContinuePlaylist}
/> />
) : (
<div className="scene-tabs" />
)}
<div className={`scene-player-container ${collapsed ? "expanded" : ""}`}> <div className={`scene-player-container ${collapsed ? "expanded" : ""}`}>
<ScenePlayer <ScenePlayer
key="ScenePlayer" key="ScenePlayer"