diff --git a/app/Services/System/Setting/SystemService.php b/app/Services/System/Setting/SystemService.php index 91c33f2..eaf531d 100644 --- a/app/Services/System/Setting/SystemService.php +++ b/app/Services/System/Setting/SystemService.php @@ -39,6 +39,9 @@ public function systemData(): array 'logo_url' => $logo['url'] ?? null, 'favicon_url' => $favicon['url'] ?? null, 'login_cover_url' => $loginCover['url'] ?? null, + 'logo' => $logo, + 'favicon' => $favicon, + 'login_cover' => $loginCover, ]; }); } @@ -57,6 +60,10 @@ function () use ($validated): void { $settings->address = $validated['address'] ?? null; $settings->save(); + $hasLogoInput = isset($validated['logo']) || isset($validated['logo_s3_key']); + $hasFaviconInput = isset($validated['favicon']) || isset($validated['favicon_s3_key']); + $hasLoginCoverInput = isset($validated['login_cover']) || isset($validated['login_cover_s3_key']); + $this->syncPhotos( $configuration, [ @@ -92,15 +99,15 @@ function () use ($validated): void { $errors = []; - if (! $configuration->hasMedia('logo')) { + if ($hasLogoInput && ! $configuration->hasMedia('logo')) { $errors['logo'] = 'Logo wajib diisi.'; } - if (! $configuration->hasMedia('favicon')) { + if ($hasFaviconInput && ! $configuration->hasMedia('favicon')) { $errors['favicon'] = 'Favicon wajib diisi.'; } - if (! $configuration->hasMedia('login_cover')) { + if ($hasLoginCoverInput && ! $configuration->hasMedia('login_cover')) { $errors['login_cover'] = 'Cover login wajib diisi.'; } diff --git a/resources/js/pages/admin/system/setting/form/SystemSection.vue b/resources/js/pages/admin/system/setting/form/SystemSection.vue index cb27940..2591e5d 100644 --- a/resources/js/pages/admin/system/setting/form/SystemSection.vue +++ b/resources/js/pages/admin/system/setting/form/SystemSection.vue @@ -29,9 +29,9 @@ const form = useForm({ address: props.data.address ?? '', }); -const logoState = ref(createMediaUploadState()); -const faviconState = ref(createMediaUploadState()); -const loginCoverState = ref(createMediaUploadState()); +const logoState = ref(createMediaUploadState(props.data.logo ? [props.data.logo] : [])); +const faviconState = ref(createMediaUploadState(props.data.favicon ? [props.data.favicon] : [])); +const loginCoverState = ref(createMediaUploadState(props.data.login_cover ? [props.data.login_cover] : [])); const isUploading = computed(() => logoState.value.pendingUploads > 0 || diff --git a/resources/js/types/setting.ts b/resources/js/types/setting.ts index c9c6a6f..9bcaf10 100644 --- a/resources/js/types/setting.ts +++ b/resources/js/types/setting.ts @@ -12,6 +12,12 @@ export type MarketplaceFeeRule = { value: number; }; +export type MediaItem = { + id: number; + url: string; + thumb_url: string; +}; + export type SystemSettingsData = { app_name: string; about_app: string; @@ -21,6 +27,9 @@ export type SystemSettingsData = { logo_url: string; favicon_url: string | null; login_cover_url: string; + logo: MediaItem | null; + favicon: MediaItem | null; + login_cover: MediaItem | null; }; export type SocialMediaSettingsData = { @@ -54,12 +63,6 @@ export type HrSettingsData = { absent_penalty_amount: number; }; -export type MediaItem = { - id: number; - url: string; - thumb_url: string; -}; - export type HomepageSettingsData = { hero_image_url: string | null; about_image_url: string | null;