From 5589135cb0adb20bcd20f2f5c258fe71b4945006 Mon Sep 17 00:00:00 2001 From: Alexander Petric Date: Wed, 7 May 2025 17:42:05 -0400 Subject: [PATCH] teams improvements if there are a large number of connected teams (#5694) * teams improvements if there are a large number of connected teams / channels * move sync to backend * formatting * update ee ref --- backend/ee-repo-ref.txt | 2 +- .../src/lib/components/ChannelSelector.svelte | 86 ++++++++++++ .../lib/components/ConnectionSection.svelte | 123 ++++++++--------- .../components/ErrorOrRecoveryHandler.svelte | 57 ++++---- .../src/lib/components/InstanceSetting.svelte | 94 +++++++------ .../src/lib/components/TeamSelector.svelte | 127 ++++++++++++++++++ 6 files changed, 344 insertions(+), 145 deletions(-) create mode 100644 frontend/src/lib/components/ChannelSelector.svelte create mode 100644 frontend/src/lib/components/TeamSelector.svelte diff --git a/backend/ee-repo-ref.txt b/backend/ee-repo-ref.txt index 8e0364f544..4ba6ebd5b8 100644 --- a/backend/ee-repo-ref.txt +++ b/backend/ee-repo-ref.txt @@ -1 +1 @@ -868ccad87afb804fe22818ecd3d5a091199bcdbf \ No newline at end of file +19b5681d1985ee5214f768e3b818faf6ca7d20b2 diff --git a/frontend/src/lib/components/ChannelSelector.svelte b/frontend/src/lib/components/ChannelSelector.svelte new file mode 100644 index 0000000000..f7db63ddc2 --- /dev/null +++ b/frontend/src/lib/components/ChannelSelector.svelte @@ -0,0 +1,86 @@ + + +
+
+
+ - {#if !isFetching} - {#if teams.length === 0} - - {:else} - - {#each teams as team} - - {/each} - {/if} - {:else} - - {/if} - -
-
- -
+
+
+ {#if platform === 'teams'} + + + {#if $enterpriseLicense} + sendUserToast('Failed to load teams: ' + e.detail.message, true)} + /> + {/if} + {:else} + {/if} - {:else} - - {/if} - Not connected + Not connected +
{/if} diff --git a/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte b/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte index c423ba7c9e..472daa9d1e 100644 --- a/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte +++ b/frontend/src/lib/components/ErrorOrRecoveryHandler.svelte @@ -3,6 +3,7 @@ import ScriptPicker from '$lib/components/ScriptPicker.svelte' import Toggle from '$lib/components/Toggle.svelte' import Tooltip from '$lib/components/Tooltip.svelte' + import ChannelSelector from '$lib/components/ChannelSelector.svelte' import type { Schema, SupportedLanguage } from '$lib/common' import { base } from '$lib/base' @@ -439,34 +440,40 @@ /> {#if workspaceConnectedToTeams} -
-
- +
+
+
+ +
+

Teams Channel

-

Teams Channel

-
- -
-
- + +
+ (handlerExtraArgs['channel'] = e.detail.channel_id)} + selectedChannel={handlerExtraArgs['channel'] + ? (teams_channels.find((ch) => ch.channel_id === handlerExtraArgs['channel']) as any) + : undefined} + /> +
+ +

- This workspace is connected to Team: {teams_team_name} + This workspace is connected to Team: {teams_team_name}

Each workspace can only be connected to one Microsoft Teams team. You can configure it under sendTeamsMessage(handlerExtraArgs['channel'] ?? '')} size="xs">Send test message {#if connectionTestJob.in_progress} - + {:else if connectionTestJob.is_success} {:else} diff --git a/frontend/src/lib/components/InstanceSetting.svelte b/frontend/src/lib/components/InstanceSetting.svelte index 9e619db2a4..958dcb9808 100644 --- a/frontend/src/lib/components/InstanceSetting.svelte +++ b/frontend/src/lib/components/InstanceSetting.svelte @@ -30,6 +30,8 @@ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte' import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte' import SimpleEditor from './SimpleEditor.svelte' + import TeamSelector from './TeamSelector.svelte' + import ChannelSelector from './ChannelSelector.svelte' export let setting: Setting export let version: string @@ -134,9 +136,8 @@ } } - function handleTeamChange(event: Event, i: number) { - const teamId = (event.target as HTMLSelectElement).value - const team = $values['teams'].find((team) => team.team_id === teamId) || null + function handleTeamChange(teamItem: { team_id: string; team_name: string }, i: number) { + const team = $values['teams'].find((team) => team.team_id === teamItem.team_id) || null $values['critical_error_channels'][i] = { teams_channel: { team_id: team?.team_id, @@ -147,13 +148,9 @@ } } - function handleChannelChange(event: Event, setting: Setting, i: number) { - const channelId = (event.target as HTMLSelectElement).value - const team = $values['teams'].find( - (team) => team.team_id === $values['critical_error_channels'][i]?.teams_channel?.team_id - ) - const channel = team?.channels.find((channel) => channel.channel_id === channelId) || null - if (channelId) { + function handleChannelChange(channel: { channel_id: string; channel_name: string }, i: number) { + const team = $values['critical_error_channels'][i]?.teams_channel + if (team) { $values['critical_error_channels'][i] = { teams_channel: { team_id: team?.team_id, @@ -458,46 +455,45 @@ /> {:else if v && 'teams_channel' in v}
- + handleTeamChange(e.detail, i)} + selectedTeam={$values['critical_error_channels'][i]?.teams_channel + ? { + team_id: + $values['critical_error_channels'][i]?.teams_channel?.team_id, + team_name: + $values['critical_error_channels'][i]?.teams_channel?.team_name + } + : undefined} + /> + {#if $values['critical_error_channels'][i]?.teams_channel?.team_id} - + + team.team_id === + $values['critical_error_channels'][i]?.teams_channel?.team_id + )?.channels ?? []} + on:change={(e) => handleChannelChange(e.detail, i)} + selectedChannel={$values['critical_error_channels'][i]?.teams_channel + ?.channel_id + ? { + channel_id: + $values['critical_error_channels'][i]?.teams_channel + ?.channel_id, + channel_name: + $values['critical_error_channels'][i]?.teams_channel + ?.channel_name + } + : undefined} + /> {/if}