pr feedback

This commit is contained in:
martabal 2023-08-16 21:13:18 +02:00
parent 4b1e1f6e83
commit 3674e5b858
No known key found for this signature in database
GPG key ID: C00196E3148A52BD
6 changed files with 162 additions and 177 deletions

View file

@ -3,59 +3,28 @@
notificationController,
NotificationType,
} from '$lib/components/shared-components/notification/notification';
import {
api,
AudioCodec,
SystemConfigDto,
SystemConfigFFmpegDto,
ToneMapping,
TranscodeHWAccel,
TranscodePolicy,
VideoCodec,
} from '@api';
import { AudioCodec, SystemConfigFFmpegDto, ToneMapping, TranscodeHWAccel, TranscodePolicy, VideoCodec } from '@api';
import SettingButtonsRow from '../setting-buttons-row.svelte';
import SettingInputField, { SettingInputFieldType } from '../setting-input-field.svelte';
import SettingSelect from '../setting-select.svelte';
import SettingSwitch from '../setting-switch.svelte';
import { isEqual } from 'lodash-es';
import { fade } from 'svelte/transition';
import { createEventDispatcher } from 'svelte';
export let config: SystemConfigDto;
export let ffmpegConfig: SystemConfigFFmpegDto; // this is the config that is being edited
export let ffmpegDefault: SystemConfigFFmpegDto;
export let savedConfig: SystemConfigFFmpegDto;
async function saveSetting() {
try {
const { data } = await api.systemConfigApi.updateConfig({
systemConfigDto: {
...config,
ffmpeg: ffmpegConfig,
},
});
ffmpegConfig = { ...data.ffmpeg };
savedConfig = { ...data.ffmpeg };
config = { ...data };
notificationController.show({
message: 'FFmpeg settings saved',
type: NotificationType.Info,
});
} catch (e) {
console.error('Error [ffmpeg-settings] [saveSetting]', e);
notificationController.show({
message: 'Unable to save settings',
type: NotificationType.Error,
});
}
}
const dispatch = createEventDispatcher<{
save: SystemConfigFFmpegDto;
}>();
async function reset() {
ffmpegConfig = { ...savedConfig };
notificationController.show({
message: 'Reset FFmpeg settings to the recent saved settings',
message: 'Reset FFmpeg settings to the last saved settings',
type: NotificationType.Info,
});
}
@ -243,7 +212,7 @@
<div class="ml-4">
<SettingButtonsRow
on:reset={reset}
on:save={saveSetting}
on:save={() => dispatch('save', ffmpegConfig)}
on:reset-to-default={resetToDefault}
showResetToDefault={!isEqual(ffmpegConfig, ffmpegDefault)}
/>

View file

@ -3,14 +3,18 @@
notificationController,
NotificationType,
} from '$lib/components/shared-components/notification/notification';
import { handleError } from '$lib/utils/handle-error';
import { api, SystemConfigDto, SystemConfigOAuthDto } from '@api';
import type { SystemConfigDto, SystemConfigOAuthDto } from '@api';
import { isEqual } from 'lodash-es';
import { fade } from 'svelte/transition';
import ConfirmDisableLogin from '../confirm-disable-login.svelte';
import SettingButtonsRow from '../setting-buttons-row.svelte';
import SettingInputField, { SettingInputFieldType } from '../setting-input-field.svelte';
import SettingSwitch from '../setting-switch.svelte';
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher<{
save: SystemConfigOAuthDto;
}>();
export let config: SystemConfigDto;
export let oauthConfig: SystemConfigOAuthDto;
@ -24,12 +28,8 @@
oauthConfig.mobileRedirectUri = window.location.origin + '/api/oauth/mobile-redirect';
}
};
async function reset() {
const { data: resetConfig } = await api.systemConfigApi.getConfig();
oauthConfig = { ...resetConfig.oauth };
savedConfig = { ...resetConfig.oauth };
oauthConfig = { ...savedConfig };
notificationController.show({
message: 'Reset OAuth settings to the last saved settings',
@ -43,6 +43,9 @@
const openConfirmModal = () => {
return new Promise((resolve) => {
handleConfirm = (value: boolean) => {
if (!value) {
oauthConfig.enabled = !oauthConfig.enabled;
}
isConfirmOpen = false;
resolve(value);
};
@ -51,33 +54,18 @@
};
async function saveSetting() {
try {
if (!config.passwordLogin.enabled && config.oauth.enabled && !oauthConfig.enabled) {
const confirmed = await openConfirmModal();
if (!confirmed) {
return;
}
if (!config.passwordLogin.enabled && savedConfig.enabled && !oauthConfig.enabled) {
const confirmed = await openConfirmModal();
if (!confirmed) {
return;
}
if (!oauthConfig.mobileOverrideEnabled) {
oauthConfig.mobileRedirectUri = '';
}
const { data } = await api.systemConfigApi.updateConfig({
systemConfigDto: {
...config,
oauth: oauthConfig,
},
});
oauthConfig = { ...data.oauth };
savedConfig = { ...data.oauth };
config = { ...data };
notificationController.show({ message: 'OAuth settings saved', type: NotificationType.Info });
} catch (error) {
handleError(error, 'Unable to save OAuth settings');
}
if (!oauthConfig.mobileOverrideEnabled) {
oauthConfig.mobileRedirectUri = '';
}
dispatch('save', oauthConfig);
}
async function resetToDefault() {

View file

@ -3,25 +3,34 @@
notificationController,
NotificationType,
} from '$lib/components/shared-components/notification/notification';
import { handleError } from '$lib/utils/handle-error';
import { api, SystemConfigDto, SystemConfigPasswordLoginDto } from '@api';
import type { SystemConfigDto, SystemConfigPasswordLoginDto } from '@api';
import { isEqual } from 'lodash-es';
import { fade } from 'svelte/transition';
import ConfirmDisableLogin from '../confirm-disable-login.svelte';
import SettingButtonsRow from '../setting-buttons-row.svelte';
import SettingSwitch from '../setting-switch.svelte';
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher<{
save: SystemConfigPasswordLoginDto;
}>();
export let config: SystemConfigDto;
export let passwordLoginConfig: SystemConfigPasswordLoginDto; // this is the config that is being edited
export let passwordLoginDefault: SystemConfigPasswordLoginDto;
export let savedConfig: SystemConfigPasswordLoginDto;
console.log(config);
console.log(passwordLoginConfig);
console.log(savedConfig);
let isConfirmOpen = false;
let handleConfirm: (value: boolean) => void;
const openConfirmModal = () => {
return new Promise((resolve) => {
handleConfirm = (value: boolean) => {
if (!value) {
passwordLoginConfig.enabled = !passwordLoginConfig.enabled;
}
isConfirmOpen = false;
resolve(value);
};
@ -30,36 +39,21 @@
};
async function saveSetting() {
try {
if (!config.oauth.enabled && config.passwordLogin.enabled && !passwordLoginConfig.enabled) {
const confirmed = await openConfirmModal();
if (!confirmed) {
return;
}
if (!config.oauth.enabled && savedConfig.enabled && !passwordLoginConfig.enabled) {
const confirmed = await openConfirmModal();
if (!confirmed) {
return;
}
const { data } = await api.systemConfigApi.updateConfig({
systemConfigDto: {
...config,
passwordLogin: passwordLoginConfig,
},
});
passwordLoginConfig = { ...data.passwordLogin };
savedConfig = { ...data.passwordLogin };
config = { ...data };
notificationController.show({ message: 'Settings saved', type: NotificationType.Info });
} catch (error) {
handleError(error, 'Unable to save settings');
}
dispatch('save', passwordLoginConfig);
}
async function reset() {
passwordLoginConfig = { ...savedConfig };
notificationController.show({
message: 'Reset settings to the recent saved settings',
message: 'Reset password authentication settings to the last saved settings',
type: NotificationType.Info,
});
}
@ -68,7 +62,7 @@
passwordLoginConfig = { ...passwordLoginDefault };
notificationController.show({
message: 'Reset password settings to default',
message: 'Reset password authentication settings to default',
type: NotificationType.Info,
});
}

View file

@ -1,11 +1,5 @@
<script lang="ts">
import {
api,
SystemConfigDto,
SystemConfigStorageTemplateDto,
SystemConfigTemplateStorageOptionDto,
UserResponseDto,
} from '@api';
import type { SystemConfigStorageTemplateDto, SystemConfigTemplateStorageOptionDto, UserResponseDto } from '@api';
import * as luxon from 'luxon';
import handlebar from 'handlebars';
import SupportedVariablesPanel from './supported-variables-panel.svelte';
@ -16,8 +10,12 @@
NotificationType,
} from '$lib/components/shared-components/notification/notification';
import SettingInputField, { SettingInputFieldType } from '../setting-input-field.svelte';
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher<{
save: SystemConfigStorageTemplateDto;
}>();
export let config: SystemConfigDto;
export let storageConfig: SystemConfigStorageTemplateDto;
export let storageDefault: SystemConfigStorageTemplateDto;
export let user: UserResponseDto;
@ -67,37 +65,11 @@
async function reset() {
storageConfig = { ...savedConfig };
notificationController.show({
message: 'Reset storage template settings to the recent saved settings',
message: 'Reset storage template settings to the last saved settings',
type: NotificationType.Info,
});
}
async function saveSetting() {
try {
const { data } = await api.systemConfigApi.updateConfig({
systemConfigDto: {
...config,
storageTemplate: storageConfig,
},
});
storageConfig = { ...data.storageTemplate };
savedConfig = { ...data.storageTemplate };
config = { ...data };
notificationController.show({
message: 'Storage template saved',
type: NotificationType.Info,
});
} catch (e) {
console.error('Error [storage-template-settings] [saveSetting]', e);
notificationController.show({
message: 'Unable to save settings',
type: NotificationType.Error,
});
}
}
async function resetToDefault() {
storageConfig = { ...storageDefault };
@ -184,7 +156,7 @@
<SettingButtonsRow
on:reset={reset}
on:save={saveSetting}
on:save={() => dispatch('save', savedConfig)}
on:reset-to-default={resetToDefault}
showResetToDefault={!isEqual(savedConfig, storageConfig)}
/>

View file

@ -1,6 +1,6 @@
<script lang="ts">
import SettingSelect from '$lib/components/admin-page/settings/setting-select.svelte';
import { api, SystemConfigDto, SystemConfigThumbnailDto } from '@api';
import type { SystemConfigThumbnailDto } from '@api';
import { fade } from 'svelte/transition';
import { isEqual } from 'lodash-es';
import SettingButtonsRow from '$lib/components/admin-page/settings/setting-buttons-row.svelte';
@ -8,8 +8,11 @@
notificationController,
NotificationType,
} from '$lib/components/shared-components/notification/notification';
import { createEventDispatcher } from 'svelte';
export let config: SystemConfigDto;
const dispatch = createEventDispatcher<{
save: SystemConfigThumbnailDto;
}>();
export let thumbnailConfig: SystemConfigThumbnailDto; // this is the config that is being edited
export let thumbnailDefault: SystemConfigThumbnailDto;
@ -19,7 +22,7 @@
thumbnailConfig = { ...savedConfig };
notificationController.show({
message: 'Reset thumbnail settings to the recent saved settings',
message: 'Reset thumbnail settings to the last saved settings',
type: NotificationType.Info,
});
}
@ -32,32 +35,6 @@
type: NotificationType.Info,
});
}
async function saveSetting() {
try {
const { data } = await api.systemConfigApi.updateConfig({
systemConfigDto: {
...config,
thumbnail: thumbnailConfig,
},
});
thumbnailConfig = { ...data.thumbnail };
savedConfig = { ...data.thumbnail };
config = { ...data };
notificationController.show({
message: 'Thumbnail settings saved',
type: NotificationType.Info,
});
} catch (e) {
console.error('Error [thumbnail-settings] [saveSetting]', e);
notificationController.show({
message: 'Unable to save settings',
type: NotificationType.Error,
});
}
}
</script>
<div>
@ -96,7 +73,7 @@
<div class="ml-4">
<SettingButtonsRow
on:reset={reset}
on:save={saveSetting}
on:save={() => dispatch('save', thumbnailConfig)}
on:reset-to-default={resetToDefault}
showResetToDefault={!isEqual(thumbnailConfig, thumbnailDefault)}
/>

View file

@ -7,31 +7,76 @@
import PasswordLoginSettings from '$lib/components/admin-page/settings/password-login/password-login-settings.svelte';
import SettingAccordion from '$lib/components/admin-page/settings/setting-accordion.svelte';
import StorageTemplateSettings from '$lib/components/admin-page/settings/storage-template/storage-template-settings.svelte';
import type { SystemConfigDto, SystemConfigTemplateStorageOptionDto } from '@api';
import { api, type SystemConfigDto, type SystemConfigTemplateStorageOptionDto } from '@api';
import type { PageData } from './$types';
import {
notificationController,
NotificationType,
} from '$lib/components/shared-components/notification/notification';
export let data: PageData;
let config: SystemConfigDto = data.config;
let currentConfig: SystemConfigDto = JSON.parse(JSON.stringify(config));
let defaultConfig: SystemConfigDto = data.defaultConfig;
let templateOptions: SystemConfigTemplateStorageOptionDto = data.templateOptions;
const handleSave = async (config: SystemConfigDto, settingsMessage: string) => {
try {
const { data } = await api.systemConfigApi.updateConfig({
systemConfigDto: config,
});
config = JSON.parse(JSON.stringify(data));
currentConfig = JSON.parse(JSON.stringify(data));
notificationController.show({
message: `${settingsMessage} settings saved`,
type: NotificationType.Info,
});
} catch (e) {
console.error(`Error [${settingsMessage}-settings] [saveSetting]`, e);
notificationController.show({
message: 'Unable to save settings',
type: NotificationType.Error,
});
}
};
$: {
console.log(config);
}
</script>
<SettingAccordion title="Thumbnail Settings" subtitle="Manage the resolution of thumbnail sizes">
<ThumbnailSettings
savedConfig={currentConfig.thumbnail}
bind:config={currentConfig}
thumbnailConfig={config.thumbnail}
bind:savedConfig={currentConfig.thumbnail}
bind:thumbnailConfig={config.thumbnail}
thumbnailDefault={defaultConfig.thumbnail}
on:save={({ detail: thumbnail }) => {
handleSave(
{
...currentConfig,
thumbnail,
},
'Thumbnail',
);
}}
/>
</SettingAccordion>
<SettingAccordion title="FFmpeg Settings" subtitle="Manage the resolution and encoding information of the video files">
<FFmpegSettings
savedConfig={currentConfig.ffmpeg}
bind:config={currentConfig}
ffmpegConfig={config.ffmpeg}
bind:savedConfig={currentConfig.ffmpeg}
bind:ffmpegConfig={config.ffmpeg}
ffmpegDefault={defaultConfig.ffmpeg}
on:save={({ detail: ffmpeg }) => {
handleSave(
{
...currentConfig,
ffmpeg,
},
'ffmpeg',
);
}}
/>
</SettingAccordion>
@ -40,24 +85,56 @@
subtitle="Manage job concurrency"
isOpen={$page.url.searchParams.get('open') === 'job-settings'}
>
<JobSettings savedConfig={currentConfig.job} bind:config jobConfig={config.job} jobDefault={defaultConfig.job} />
<JobSettings
bind:savedConfig={currentConfig.job}
bind:config
bind:jobConfig={config.job}
jobDefault={defaultConfig.job}
on:save={({ detail: job }) => {
handleSave(
{
...currentConfig,
job,
},
'Password Authentication',
);
}}
/>
</SettingAccordion>
<SettingAccordion title="Password Authentication" subtitle="Manage login with password settings">
<PasswordLoginSettings
savedConfig={currentConfig.passwordLogin}
bind:config={currentConfig}
passwordLoginConfig={config.passwordLogin}
bind:savedConfig={currentConfig.passwordLogin}
bind:passwordLoginConfig={config.passwordLogin}
bind:config
passwordLoginDefault={defaultConfig.passwordLogin}
on:save={({ detail: passwordLogin }) => {
handleSave(
{
...currentConfig,
passwordLogin,
},
'Password Authentication',
);
}}
/>
</SettingAccordion>
<SettingAccordion title="OAuth Authentication" subtitle="Manage the login with OAuth settings">
<OAuthSettings
savedConfig={currentConfig.oauth}
bind:config={currentConfig}
oauthConfig={config.oauth}
bind:savedConfig={currentConfig.oauth}
bind:oauthConfig={config.oauth}
bind:config
oauthDefault={defaultConfig.oauth}
on:save={({ detail: oauth }) => {
handleSave(
{
...currentConfig,
oauth,
},
'OAuth Authentication',
);
}}
/>
</SettingAccordion>
@ -68,10 +145,18 @@
>
<StorageTemplateSettings
savedConfig={currentConfig.storageTemplate}
bind:config={currentConfig}
storageConfig={config.storageTemplate}
user={data.user}
storageDefault={defaultConfig.storageTemplate}
{templateOptions}
on:save={({ detail: storageTemplate }) => {
handleSave(
{
...currentConfig,
storageTemplate,
},
'Storage Template',
);
}}
/>
</SettingAccordion>