diff --git a/src/lib/components/imagePreview.svelte b/src/lib/components/imagePreview.svelte
index 1c5f3cfdf8..e377b07390 100644
--- a/src/lib/components/imagePreview.svelte
+++ b/src/lib/components/imagePreview.svelte
@@ -12,6 +12,8 @@
style="inline-size: 100%; block-size: 100%;"
target="_blank"
rel="noopener noreferrer"
+ on:click|stopPropagation
+ on:mousedown|stopPropagation
aria-label="open file in new window">

diff --git a/src/lib/elements/forms/helper.svelte b/src/lib/elements/forms/helper.svelte
index 99e580c8d8..76ac8cab5c 100644
--- a/src/lib/elements/forms/helper.svelte
+++ b/src/lib/elements/forms/helper.svelte
@@ -5,7 +5,7 @@
import { SearchQuery, ViewSelector } from '$lib/components';
- import { FiltersBottomSheet, ParsedTagList, queryParamToMap } from '$lib/components/filters';
+ import {
+ FiltersBottomSheet,
+ ParsedTagList,
+ queryParamToMap,
+ Filters
+ } from '$lib/components/filters';
import QuickFilters from '$lib/components/filters/quickFilters.svelte';
import Button from '$lib/elements/forms/button.svelte';
import { View } from '$lib/helpers/load';
@@ -23,6 +28,7 @@
hasSearch = false,
searchPlaceholder = 'Search by ID',
hasFilters = false,
+ hasCustomFiltersOnly = false,
analyticsSource = '',
children
}: {
@@ -33,6 +39,7 @@
hasSearch?: boolean;
searchPlaceholder?: string;
hasFilters?: boolean;
+ hasCustomFiltersOnly?: boolean;
analyticsSource?: string;
children?: Snippet;
} = $props();
@@ -109,7 +116,11 @@
{#if hasFilters && $columns?.length}
-
+ {#if hasCustomFiltersOnly}
+
+ {:else}
+
+ {/if}
{/if}
{#if hasDisplaySettings}
diff --git a/src/routes/(console)/project-[region]-[project]/messaging/createMessageDropdown.svelte b/src/routes/(console)/project-[region]-[project]/messaging/createMessageDropdown.svelte
index e91f92669d..49e018a16f 100644
--- a/src/routes/(console)/project-[region]-[project]/messaging/createMessageDropdown.svelte
+++ b/src/routes/(console)/project-[region]-[project]/messaging/createMessageDropdown.svelte
@@ -7,7 +7,7 @@
import { page } from '$app/state';
-
+
@@ -115,14 +115,11 @@
{:else if $hasPageQueries}
{:else if data.search}
-
-
-
Sorry, we couldn't find '{data.search}'
-
There are no subscribers that match your search.
-
+
{:else}
@@ -141,7 +138,7 @@
on:update={addTargets}>
- Add subscribers to this topic by selecting the targets for directing messages.{' '}
+ Create subscribers for this topic by selecting the targets for directing messages.{' '}
diff --git a/src/routes/(console)/project-[region]-[project]/messaging/topicsModal.svelte b/src/routes/(console)/project-[region]-[project]/messaging/topicsModal.svelte
index 38e2d5f28c..6c23ef4ca9 100644
--- a/src/routes/(console)/project-[region]-[project]/messaging/topicsModal.svelte
+++ b/src/routes/(console)/project-[region]-[project]/messaging/topicsModal.svelte
@@ -16,29 +16,19 @@
import { getProviderText } from './helper';
import { page } from '$app/state';
- let {
- providerType,
- show = $bindable(),
- topicsById = $bindable(),
- title = 'Select topics'
- } = $props<{
- providerType: MessagingProviderType;
- show: boolean;
- topicsById: Record;
- title?: string;
- }>();
+ export let providerType: MessagingProviderType;
+ export let show: boolean;
+ export let topicsById: Record;
+ export let title: string = 'Select topics';
const dispatch = createEventDispatcher();
- let search = $state('');
- let offset = $state(0);
- let totalResults = $state(0);
- let topicResultsById = $state>({});
- let selected = $state>({});
- let emptyTopicsExists = $state(false);
-
- let previousSearch = $state('');
- let wasOpen = $state(false);
+ let search = '';
+ let offset = 0;
+ let totalResults = 0;
+ let topicResultsById: Record = {};
+ let selected: Record = {};
+ let emptyTopicsExists = false;
function getTopicTotal(topic: Models.Topic): number {
switch (providerType) {
@@ -96,44 +86,38 @@
}
function onTopicSelection(event: CustomEvent, topic: Models.Topic) {
+ const updatedSelected = { ...selected };
+
if (event.detail) {
- selected = {
- ...selected,
- [topic.$id]: topic
- };
+ updatedSelected[topic.$id] = topic;
} else {
- const { [topic.$id]: _, ...rest } = selected;
- selected = rest;
+ delete updatedSelected[topic.$id];
}
- }
- $effect(() => {
- if (search !== previousSearch) {
- previousSearch = search;
- offset = 0;
- }
- });
+ selected = updatedSelected;
+ }
- $effect(() => {
- if (!show) return;
- offset ?? null;
- search ?? null;
+ $: if (show) {
request();
- });
-
- $effect(() => {
- if (show && !wasOpen) {
- selected = topicsById;
- }
- wasOpen = show;
- });
+ }
+ $: if (offset !== null) {
+ request();
+ }
+ $: if (search !== null) {
+ offset = 0;
+ request();
+ }
- let selectedSize = $derived(Object.keys(selected).length);
- let hasSelection = $derived(selectedSize > 0);
+ $: selectedSize = Object.keys(selected).length;
+ $: hasSelection = selectedSize > 0;
- let topicSelectionStates = $derived(
- Object.fromEntries(Object.keys(topicResultsById).map((id) => [id, !!selected[id]]))
+ $: topicSelectionStates = Object.fromEntries(
+ Object.keys(topicResultsById).map((id) => [id, !!selected[id]])
);
+
+ $: if (show) {
+ selected = topicsById;
+ }
@@ -185,7 +169,7 @@