Skip to content

Commit c61a15a

Browse files
committed
Fixed some rendering issues with manage project page
1 parent 6eac2bd commit c61a15a

File tree

6 files changed

+38
-21
lines changed

6 files changed

+38
-21
lines changed

src/Exceptionless.Web/ClientApp/src/lib/features/events/models/event-data.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { logLevels } from '../options';
2+
13
export interface EnvironmentInfo {
24
architecture?: string;
35
available_physical_memory?: number;
@@ -129,7 +131,7 @@ export interface UserInfo {
129131
}
130132

131133
// TODO: Move to a helper.
132-
export function getLogLevel(level?: LogLevel): LogLevel | null {
134+
export function getLogLevel(level?: LogLevel | null): LogLevel | null {
133135
switch (level?.toLowerCase().trim()) {
134136
case '0':
135137
case 'false':
@@ -152,6 +154,11 @@ export function getLogLevel(level?: LogLevel): LogLevel | null {
152154
case 'warn':
153155
return 'warn';
154156
default:
155-
return null;
157+
return level ?? null;
156158
}
157159
}
160+
161+
export function getLogLevelDisplayName(level?: LogLevel | null): LogLevel | null {
162+
const resolvedLevel = getLogLevel(level);
163+
return logLevels.find((l) => l.value === resolvedLevel)?.label ?? level ?? null;
164+
}

src/Exceptionless.Web/ClientApp/src/lib/features/projects/api.svelte.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ export function updateProject(request: UpdateProjectRequest) {
332332
const queryClient = useQueryClient();
333333

334334
return createMutation<ViewProject, ProblemDetails, UpdateProject>(() => ({
335+
enabled: () => !!accessToken.current && !!request.route.id,
335336
mutationFn: async (data: UpdateProject) => {
336337
const client = useFetchClient();
337338
const response = await client.patchJSON<ViewProject>(`projects/${request.route.id}`, data);

src/Exceptionless.Web/ClientApp/src/lib/features/projects/components/project-log-level.svelte

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script lang="ts">
22
import * as DropdownMenu from '$comp/ui/dropdown-menu';
33
import { Skeleton } from '$comp/ui/skeleton';
4-
import { getLogLevel, type LogLevel } from '$features/events/models/event-data';
4+
import { getLogLevel, getLogLevelDisplayName, type LogLevel } from '$features/events/models/event-data';
55
import { logLevels } from '$features/events/options';
66
import { deleteProjectConfig, getProjectConfig, postProjectConfig } from '$features/projects/api.svelte';
77
import { Button } from '$features/shared/components/ui/button';
@@ -44,19 +44,20 @@
4444
value: level
4545
});
4646
47-
toast.success(`Successfully updated Log level to ${level}`);
47+
toast.success(`Successfully updated Log level to ${getLogLevelDisplayName(level)}`);
4848
}
4949
5050
async function revertToDefaultLogLevel() {
5151
removeProjectConfig.mutateAsync({
5252
key: `@@log:${source}`
5353
});
54-
toast.success(`Successfully reverted to default (${defaultLevel}) log level`);
54+
toast.success(`Successfully reverted to default (${defaultLevelDisplayName}) log level`);
5555
}
5656
5757
const configSettings = $derived(projectConfigResponse.data?.settings ?? {});
5858
const level = $derived(getLogLevel(configSettings[`@@log:${source ?? ''}`]));
5959
const defaultLevel = $derived(getDefaultLogLevel(configSettings, source ?? ''));
60+
const defaultLevelDisplayName = $derived(getLogLevelDisplayName(defaultLevel));
6061
6162
function getDefaultLogLevel(configSettings: Record<string, string>, source: string): LogLevel | null {
6263
const sourcePrefix = '@@log:';
@@ -131,11 +132,12 @@
131132
<DropdownMenu.Root>
132133
<DropdownMenu.Trigger>
133134
<Button variant="outline">
134-
Log Level:
135135
{#if level}
136-
{level}
136+
Log Level: {getLogLevelDisplayName(level)}
137+
{:else if defaultLevel}
138+
Log Level: {defaultLevelDisplayName} (Default)
137139
{:else}
138-
{defaultLevel} (Default)
140+
Select a Default Log Level
139141
{/if}
140142
<ChevronDown class="size-4" />
141143
</Button>
@@ -145,17 +147,20 @@
145147
<DropdownMenu.GroupHeading>Log Level</DropdownMenu.GroupHeading>
146148
<DropdownMenu.Separator />
147149

148-
{#each logLevels as level (level.value)}
149-
<DropdownMenu.Item
150-
title={`Update Log Level to ${level.label}`}
151-
onclick={() => setLogLevel(level.value)}
152-
disabled={updateProjectConfig.isPending}>{level.label}</DropdownMenu.Item
150+
{#each logLevels as lvl (lvl.value)}
151+
<DropdownMenu.CheckboxItem
152+
checked={lvl.value === level}
153+
title={`Update Log Level to ${lvl.label}`}
154+
onclick={() => setLogLevel(lvl.value)}
155+
disabled={updateProjectConfig.isPending}>{lvl.label}</DropdownMenu.CheckboxItem
153156
>
154157
{/each}
155158
{#if level && source !== '*'}
156159
<DropdownMenu.Separator />
157-
<DropdownMenu.Item title={`Reset to default (${defaultLevel})`} onclick={revertToDefaultLogLevel} disabled={removeProjectConfig.isPending}
158-
>Default ({defaultLevel})</DropdownMenu.Item
160+
<DropdownMenu.Item
161+
title={`Reset to default (${defaultLevelDisplayName})`}
162+
onclick={revertToDefaultLogLevel}
163+
disabled={removeProjectConfig.isPending}>Default ({defaultLevelDisplayName})</DropdownMenu.Item
159164
>
160165
{/if}
161166
</DropdownMenu.Group>
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
export { ClientConfiguration, NewProject, ViewProject } from '$generated/api';
22

3-
import { IsBoolean, IsString } from 'class-validator';
3+
import { IsBoolean, IsOptional, IsString } from 'class-validator';
44

55
export class UpdateProject {
6-
@IsBoolean({ message: 'delete_bot_data_enabled is required.' }) delete_bot_data_enabled: boolean = true;
7-
@IsString({ message: 'name is required.' }) name!: string;
6+
@IsBoolean({ message: 'delete_bot_data_enabled is required.' })
7+
@IsOptional()
8+
delete_bot_data_enabled: boolean = true;
9+
@IsOptional()
10+
@IsString({ message: 'name is required.' })
11+
name!: string;
812
}

src/Exceptionless.Web/ClientApp/src/routes/(app)/account/manage/+page.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
toast.dismiss(toastId);
4747
try {
4848
await updateEmailAddress.mutateAsync(form.data);
49-
toastId = toast.success('Account updated successfully.');
49+
toastId = toast.success('Successfully updated Account');
5050
5151
// HACK: This is to prevent sveltekit from stealing focus
5252
result.type = 'failure';
@@ -73,7 +73,7 @@
7373
toast.dismiss(toastId);
7474
try {
7575
form.data = await updateUser.mutateAsync(form.data);
76-
toastId = toast.success('Account updated successfully.');
76+
toastId = toast.success('Successfully updated Account');
7777
7878
// HACK: This is to prevent sveltekit from stealing focus
7979
result.type = 'failure';

src/Exceptionless.Web/ClientApp/src/routes/(app)/project/[projectId]/manage/+page.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@
9393
await update.mutateAsync(form.data);
9494
9595
toast.dismiss(toastId);
96-
toastId = toast.success('Project name updated successfully.');
96+
toastId = toast.success('Successfully updated Project name');
9797
} catch (ex) {
9898
const problem = ex as ProblemDetails;
9999
applyServerSideErrors(form, problem);

0 commit comments

Comments
 (0)