enzostvs HF staff commited on
Commit
08d7ef5
·
1 Parent(s): 96eeadd

feat: able to publish even after the generation

Browse files
src/lib/components/community/Card.svelte CHANGED
@@ -7,12 +7,13 @@
7
  import { galleryStore } from "$lib/stores/use-gallery";
8
  import Loading from "$lib/components/Loading.svelte";
9
  import Reactions from "./reactions/Reactions.svelte";
10
- import { success } from "$lib/utils/toaster";
11
 
12
  export let card: CommunityCard;
13
  export let form: Record<string, string> | undefined = undefined;
14
  export let displayReactions: boolean = true;
15
  export let displayDelete: boolean = false;
 
16
 
17
  let is_visible = true;
18
  let loading = false;
@@ -41,6 +42,17 @@
41
  if (success) is_visible = false;
42
  loading = false;
43
  }
 
 
 
 
 
 
 
 
 
 
 
44
  </script>
45
 
46
  <!-- svelte-ignore a11y-no-static-element-interactions -->
@@ -74,17 +86,35 @@
74
  {#if displayReactions}
75
  <Reactions reactions={card.reactions} gallery_id={card.id} />
76
  {/if}
77
- {#if displayDelete}
78
- <button
79
- class="absolute bottom-3 right-3 p-2.5 rounded-full bg-red-500 backdrop-blur-sm transition-all duration-200 hover:bg-red-700"
80
- on:click={(e) => {
81
- e.stopPropagation();
82
- e.preventDefault();
83
- handleDelete(card.id);
84
- }}
85
- >
86
- <Icon icon="ic:round-delete" class="text-white w-5 h-5" />
87
- </button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  {/if}
89
  {#if loading}
90
  <Loading />
 
7
  import { galleryStore } from "$lib/stores/use-gallery";
8
  import Loading from "$lib/components/Loading.svelte";
9
  import Reactions from "./reactions/Reactions.svelte";
10
+ import { error, success } from "$lib/utils/toaster";
11
 
12
  export let card: CommunityCard;
13
  export let form: Record<string, string> | undefined = undefined;
14
  export let displayReactions: boolean = true;
15
  export let displayDelete: boolean = false;
16
+ export let displayPublish: boolean = false;
17
 
18
  let is_visible = true;
19
  let loading = false;
 
42
  if (success) is_visible = false;
43
  loading = false;
44
  }
45
+
46
+ const handlePublish = async (id: string) => {
47
+ if (loading) return;
48
+ loading = true
49
+ const request = await fetch(`/api/community/${id}/publish`, {
50
+ method: "POST"
51
+ });
52
+ const { success } = await request.json();
53
+ if (success) card.isPublic = true;
54
+ loading = false;
55
+ }
56
  </script>
57
 
58
  <!-- svelte-ignore a11y-no-static-element-interactions -->
 
86
  {#if displayReactions}
87
  <Reactions reactions={card.reactions} gallery_id={card.id} />
88
  {/if}
89
+ {#if displayPublish || displayDelete}
90
+ <div class="absolute bottom-0 left-0 w-full p-4 flex items-center justify-end gap-3">
91
+ {#if displayPublish && !card.isPublic}
92
+ <button
93
+ class="px-4 py-2.5 text-white rounded-full bg-blue-500 backdrop-blur-sm text-sm font-medium transition-all duration-200 hover:bg-blue-700"
94
+ on:click={(e) => {
95
+ e.stopPropagation();
96
+ e.preventDefault();
97
+ handlePublish(card.id);
98
+ success("Published successfully");
99
+ }}
100
+ >
101
+ Publish
102
+ </button>
103
+ {/if}
104
+ {#if displayDelete}
105
+ <button
106
+ class="p-2.5 rounded-full bg-red-500 backdrop-blur-sm transition-all duration-200 hover:bg-red-700"
107
+ on:click={(e) => {
108
+ e.stopPropagation();
109
+ e.preventDefault();
110
+ handleDelete(card.id);
111
+ error("Deleted successfully");
112
+ }}
113
+ >
114
+ <Icon icon="ic:round-delete" class="text-white w-5 h-5" />
115
+ </button>
116
+ {/if}
117
+ </div>
118
  {/if}
119
  {#if loading}
120
  <Loading />
src/lib/type.ts CHANGED
@@ -11,6 +11,7 @@ export interface CommunityCard {
11
  model: ModelCard,
12
  prompt: string,
13
  createdAt: Date,
 
14
  user: UserType,
15
  image: string,
16
  comments?: CommentType[],
 
11
  model: ModelCard,
12
  prompt: string,
13
  createdAt: Date,
14
+ isPublic: boolean,
15
  user: UserType,
16
  image: string,
17
  comments?: CommentType[],
src/routes/api/@me/generations/+server.ts CHANGED
@@ -35,6 +35,7 @@ export async function GET({ cookies } : RequestEvent) {
35
  reactions: true,
36
  id: true,
37
  prompt: true,
 
38
  image: true,
39
  model: true,
40
  },
 
35
  reactions: true,
36
  id: true,
37
  prompt: true,
38
+ isPublic: true,
39
  image: true,
40
  model: true,
41
  },
src/routes/saved-generations/+page.svelte CHANGED
@@ -17,7 +17,7 @@
17
  </h1>
18
  <div class="mx-auto grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 2xl:grid-cols-4 gap-5 mt-8 lg:mt-10">
19
  {#each data.cards as card}
20
- <Card card={card} displayReactions={false} displayDelete={true} />
21
  {/each}
22
  <GoTop />
23
  </div>
 
17
  </h1>
18
  <div class="mx-auto grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 2xl:grid-cols-4 gap-5 mt-8 lg:mt-10">
19
  {#each data.cards as card}
20
+ <Card card={card} displayReactions={false} displayDelete={true} displayPublish={true} />
21
  {/each}
22
  <GoTop />
23
  </div>