mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-07 02:21:23 +00:00
WIP add favorites
This commit is contained in:
1 parent
2a4a8eceb1
commit
97c2ae7452
2 files changed
+54
-1
No files matched your search
@@ -0,0 +1,20 @@
|
||||
import MakeRequest from "../MakeRequest";
|
||||
|
||||
export interface CreateFeaturedItemRequest {
|
||||
entity_token: string,
|
||||
entity_type: string,
|
||||
}
|
||||
|
||||
export interface CreateFeaturedItemResponse {
|
||||
success: boolean
|
||||
}
|
||||
|
||||
export const CreateFeaturedItem = MakeRequest<
|
||||
string,
|
||||
CreateFeaturedItemRequest,
|
||||
CreateFeaturedItemResponse,
|
||||
{}
|
||||
>({
|
||||
method: "POST",
|
||||
routingFunction: () => "/v1/featured_item/create",
|
||||
});
|
||||
@@ -36,13 +36,15 @@ import { useBookmarks, useMedia, useRatings, useSession } from "hooks";
|
||||
import { WeightCategory } from "@storyteller/components/src/api/_common/enums/WeightCategory";
|
||||
import SdBatchMediaPanel from "./components/SdBatchMediaPanel/SdBatchMediaPanel";
|
||||
import { GetMediaBatchImages } from "@storyteller/components/src/api/media_files/GetMediaBatchImages";
|
||||
import { CreateFeaturedItem } from "@storyteller/components/src/api/featured_items/CreateFeaturedItem";
|
||||
import { mediaTypeLabels } from "utils/mediaTypeLabels";
|
||||
import { EngineMediaPanel } from "./components/EngineMediaPanel/EngineMediaPanel";
|
||||
import { GetMediaFileTitle } from "common/GetMediaFileTitle";
|
||||
import { STYLES_BY_KEY } from "common/StyleOptions";
|
||||
import { faStarShooting } from "@fortawesome/pro-duotone-svg-icons";
|
||||
|
||||
export default function MediaPage() {
|
||||
const { canAccessStudio, canEditMediaFile, user } = useSession();
|
||||
const { canAccessStudio, canEditMediaFile, canBanUsers, user } = useSession();
|
||||
const { token } = useParams<{ token: string }>();
|
||||
const bookmarks = useBookmarks();
|
||||
const ratings = useRatings();
|
||||
@@ -70,6 +72,8 @@ export default function MediaPage() {
|
||||
mediaFile?.maybe_creator_user?.user_token || ""
|
||||
);
|
||||
|
||||
const viewerCanMakeFeatured = canBanUsers() || false;
|
||||
|
||||
// Inside MediaPage.tsx
|
||||
|
||||
useEffect(() => {
|
||||
@@ -99,6 +103,22 @@ export default function MediaPage() {
|
||||
|
||||
const deleteMedia = () => remove(!!user?.can_ban_users);
|
||||
|
||||
const handleFeatureMedia = async () => {
|
||||
setFeatureMedia(true);
|
||||
}
|
||||
|
||||
const setFeatureMedia = async (setFeatured: boolean) => {
|
||||
if (mediaFile === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
const request = {
|
||||
entity_type: "media_file",
|
||||
entity_token: mediaFile.token
|
||||
}
|
||||
await CreateFeaturedItem("", request);
|
||||
}
|
||||
|
||||
const copyToClipboard = async (
|
||||
text: string,
|
||||
setButtonText: React.Dispatch<React.SetStateAction<string>>
|
||||
@@ -832,6 +852,19 @@ export default function MediaPage() {
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
{ viewerCanMakeFeatured && (
|
||||
<>
|
||||
<div className="d-flex gap-2">
|
||||
<Button
|
||||
full={true}
|
||||
variant="secondary"
|
||||
icon={faStarShooting}
|
||||
label="Set Featured"
|
||||
onClick={handleFeatureMedia}
|
||||
/>
|
||||
</div>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user