Spaces:
Running
Running
Shared convos can be opened without being logged in (#266, #270) (#271)
Browse files
src/lib/components/chat/ChatInput.svelte
CHANGED
|
@@ -50,6 +50,7 @@
|
|
| 50 |
bind:this={textareaElement}
|
| 51 |
{disabled}
|
| 52 |
on:keydown={handleKeydown}
|
|
|
|
| 53 |
{placeholder}
|
| 54 |
/>
|
| 55 |
</div>
|
|
|
|
| 50 |
bind:this={textareaElement}
|
| 51 |
{disabled}
|
| 52 |
on:keydown={handleKeydown}
|
| 53 |
+
on:keypress
|
| 54 |
{placeholder}
|
| 55 |
/>
|
| 56 |
</div>
|
src/lib/components/chat/ChatWindow.svelte
CHANGED
|
@@ -12,6 +12,7 @@
|
|
| 12 |
import StopGeneratingBtn from "../StopGeneratingBtn.svelte";
|
| 13 |
import type { Model } from "$lib/types/Model";
|
| 14 |
import type { LayoutData } from "../../../routes/$types";
|
|
|
|
| 15 |
|
| 16 |
export let messages: Message[] = [];
|
| 17 |
export let loading = false;
|
|
@@ -21,8 +22,10 @@
|
|
| 21 |
export let models: Model[];
|
| 22 |
export let settings: LayoutData["settings"];
|
| 23 |
|
|
|
|
| 24 |
$: isReadOnly = !models.some((model) => model.id === currentModel.id);
|
| 25 |
|
|
|
|
| 26 |
let message: string;
|
| 27 |
|
| 28 |
const dispatch = createEventDispatcher<{
|
|
@@ -40,6 +43,9 @@
|
|
| 40 |
</script>
|
| 41 |
|
| 42 |
<div class="relative min-h-0 min-w-0">
|
|
|
|
|
|
|
|
|
|
| 43 |
<ChatMessages
|
| 44 |
{loading}
|
| 45 |
{pending}
|
|
@@ -71,6 +77,9 @@
|
|
| 71 |
placeholder="Ask anything"
|
| 72 |
bind:value={message}
|
| 73 |
on:submit={handleSubmit}
|
|
|
|
|
|
|
|
|
|
| 74 |
maxRows={4}
|
| 75 |
disabled={isReadOnly}
|
| 76 |
/>
|
|
|
|
| 12 |
import StopGeneratingBtn from "../StopGeneratingBtn.svelte";
|
| 13 |
import type { Model } from "$lib/types/Model";
|
| 14 |
import type { LayoutData } from "../../../routes/$types";
|
| 15 |
+
import LoginModal from "../LoginModal.svelte";
|
| 16 |
|
| 17 |
export let messages: Message[] = [];
|
| 18 |
export let loading = false;
|
|
|
|
| 22 |
export let models: Model[];
|
| 23 |
export let settings: LayoutData["settings"];
|
| 24 |
|
| 25 |
+
export let loginRequired = false;
|
| 26 |
$: isReadOnly = !models.some((model) => model.id === currentModel.id);
|
| 27 |
|
| 28 |
+
let loginModalOpen = false;
|
| 29 |
let message: string;
|
| 30 |
|
| 31 |
const dispatch = createEventDispatcher<{
|
|
|
|
| 43 |
</script>
|
| 44 |
|
| 45 |
<div class="relative min-h-0 min-w-0">
|
| 46 |
+
{#if loginModalOpen}
|
| 47 |
+
<LoginModal {settings} on:close={() => (loginModalOpen = false)} />
|
| 48 |
+
{/if}
|
| 49 |
<ChatMessages
|
| 50 |
{loading}
|
| 51 |
{pending}
|
|
|
|
| 77 |
placeholder="Ask anything"
|
| 78 |
bind:value={message}
|
| 79 |
on:submit={handleSubmit}
|
| 80 |
+
on:keypress={() => {
|
| 81 |
+
if (loginRequired) loginModalOpen = true;
|
| 82 |
+
}}
|
| 83 |
maxRows={4}
|
| 84 |
disabled={isReadOnly}
|
| 85 |
/>
|
src/routes/+layout.svelte
CHANGED
|
@@ -91,6 +91,11 @@
|
|
| 91 |
});
|
| 92 |
|
| 93 |
$: if ($error) onError();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 94 |
</script>
|
| 95 |
|
| 96 |
<svelte:head>
|
|
@@ -136,7 +141,7 @@
|
|
| 136 |
{#if isSettingsOpen}
|
| 137 |
<SettingsModal on:close={() => (isSettingsOpen = false)} settings={data.settings} />
|
| 138 |
{/if}
|
| 139 |
-
{#if
|
| 140 |
<LoginModal settings={data.settings} />
|
| 141 |
{/if}
|
| 142 |
<slot />
|
|
|
|
| 91 |
});
|
| 92 |
|
| 93 |
$: if ($error) onError();
|
| 94 |
+
|
| 95 |
+
const requiresLogin =
|
| 96 |
+
!$page.error &&
|
| 97 |
+
(data.requiresLogin ? !data.user : !data.settings.ethicsModalAcceptedAt) &&
|
| 98 |
+
!$page.route.id?.startsWith("/r/");
|
| 99 |
</script>
|
| 100 |
|
| 101 |
<svelte:head>
|
|
|
|
| 141 |
{#if isSettingsOpen}
|
| 142 |
<SettingsModal on:close={() => (isSettingsOpen = false)} settings={data.settings} />
|
| 143 |
{/if}
|
| 144 |
+
{#if requiresLogin}
|
| 145 |
<LoginModal settings={data.settings} />
|
| 146 |
{/if}
|
| 147 |
<slot />
|
src/routes/r/[id]/+page.svelte
CHANGED
|
@@ -24,6 +24,7 @@
|
|
| 24 |
},
|
| 25 |
body: JSON.stringify({
|
| 26 |
fromShare: $page.params.id,
|
|
|
|
| 27 |
}),
|
| 28 |
});
|
| 29 |
|
|
@@ -77,4 +78,6 @@
|
|
| 77 |
models={data.models}
|
| 78 |
currentModel={findCurrentModel(data.models, data.model)}
|
| 79 |
settings={data.settings}
|
|
|
|
|
|
|
| 80 |
/>
|
|
|
|
| 24 |
},
|
| 25 |
body: JSON.stringify({
|
| 26 |
fromShare: $page.params.id,
|
| 27 |
+
model: data.model,
|
| 28 |
}),
|
| 29 |
});
|
| 30 |
|
|
|
|
| 78 |
models={data.models}
|
| 79 |
currentModel={findCurrentModel(data.models, data.model)}
|
| 80 |
settings={data.settings}
|
| 81 |
+
loginRequired={!$page.error &&
|
| 82 |
+
(data.requiresLogin ? !data.user : !data.settings.ethicsModalAcceptedAt)}
|
| 83 |
/>
|