diff --git a/app/Filament/Admin/Resources/Pages/Pages/EditPage.php b/app/Filament/Admin/Resources/Pages/Pages/EditPage.php
index 569c930..6fc9970 100644
--- a/app/Filament/Admin/Resources/Pages/Pages/EditPage.php
+++ b/app/Filament/Admin/Resources/Pages/Pages/EditPage.php
@@ -45,6 +45,58 @@ class EditPage extends EditRecord
// Load existing translations
$translationData = TranslationTabs::fillFromRecord($this->record);
+ // Convert old format sections to new format
+ if (isset($data['sections']) && is_array($data['sections'])) {
+ $data['sections'] = array_map(function ($section) {
+ if (!isset($section['data']) || !is_array($section['data'])) {
+ return $section;
+ }
+
+ // Check if already in new format
+ $firstKey = array_key_first($section['data']);
+ if (is_numeric($firstKey) && isset($section['data'][$firstKey]['key'])) {
+ return $section;
+ }
+
+ // Convert old format to new format
+ $newData = [];
+ foreach ($section['data'] as $key => $value) {
+ $type = 'text'; // Default
+
+ // Auto-detect type based on key name and value
+ if (str_contains($key, 'image') || str_contains($key, 'photo')) {
+ $type = 'image';
+ } elseif (str_contains($key, 'icon') && is_string($value) && str_starts_with($value, 'assets/')) {
+ $type = 'image';
+ } elseif (str_contains($key, 'color')) {
+ $type = 'color';
+ } elseif (str_contains($key, 'url') || str_contains($key, 'link')) {
+ $type = 'url';
+ } elseif (is_string($value) && (str_contains($key, 'subtitle') || str_contains($key, 'description'))) {
+ $type = 'textarea';
+ } elseif (is_string($value) && str_contains($value, '<') && str_contains($value, '>') && strlen($value) > 200) {
+ $type = 'html'; // Long HTML content
+ } elseif (is_string($value) && strlen($value) > 100) {
+ $type = 'textarea';
+ } elseif (is_array($value)) {
+ $type = 'array';
+ } elseif (is_bool($value)) {
+ $type = 'boolean';
+ }
+ // 'title' gibi kısa HTML snippet'leri 'text' olarak kalır
+
+ $newData[] = [
+ 'key' => $key,
+ 'type' => $type,
+ 'value' => $value,
+ ];
+ }
+
+ $section['data'] = $newData;
+ return $section;
+ }, $data['sections']);
+ }
+
return array_merge($data, $translationData);
}
diff --git a/app/Filament/Admin/Resources/Pages/Schemas/PageForm.php b/app/Filament/Admin/Resources/Pages/Schemas/PageForm.php
index 7b5e6df..0c37c7e 100644
--- a/app/Filament/Admin/Resources/Pages/Schemas/PageForm.php
+++ b/app/Filament/Admin/Resources/Pages/Schemas/PageForm.php
@@ -245,7 +245,16 @@ class PageForm
->placeholder('Değer girin...')
->live(onBlur: true)
->afterStateUpdated(fn ($state, callable $set) => $set('value', $state))
- ->afterStateHydrated(fn ($component, $state, Get $get) => $component->state($get('value')))
+ ->afterStateHydrated(function ($component, $state, Get $get) {
+ // Only hydrate if this field type is active
+ if (!in_array($get('type'), ['text', 'url', 'email', 'phone', 'number'])) {
+ return;
+ }
+ $value = $get('value');
+ if ($value !== null) {
+ $component->state($value);
+ }
+ })
->dehydrated(false)
->columnSpanFull(),
@@ -257,7 +266,16 @@ class PageForm
->placeholder(fn (Get $get) => $get('type') === 'html' ? '
HTML kodu girin...
' : 'Metin girin...')
->live(onBlur: true)
->afterStateUpdated(fn ($state, callable $set) => $set('value', $state))
- ->afterStateHydrated(fn ($component, $state, Get $get) => $component->state($get('value')))
+ ->afterStateHydrated(function ($component, $state, Get $get) {
+ // Only hydrate if this field type is active
+ if (!in_array($get('type'), ['textarea', 'json', 'html'])) {
+ return;
+ }
+ $value = $get('value');
+ if ($value !== null) {
+ $component->state($value);
+ }
+ })
->dehydrated(false)
->columnSpanFull(),
@@ -276,7 +294,33 @@ class PageForm
])
->live(onBlur: true)
->afterStateUpdated(fn ($state, callable $set) => $set('value', $state))
- ->afterStateHydrated(fn ($component, $state, Get $get) => $component->state($get('value')))
+ ->afterStateHydrated(function ($component, $state, Get $get) {
+ // Only hydrate if this field type is richtext
+ if ($get('type') !== 'richtext') {
+ return;
+ }
+
+ $value = $get('value');
+
+ // Skip if null or empty
+ if ($value === null || $value === '' || $value === []) {
+ return;
+ }
+
+ // Only set if it's valid TipTap JSON format
+ if (is_array($value) && isset($value['type']) && $value['type'] === 'doc') {
+ $component->state($value);
+ } elseif (is_string($value)) {
+ try {
+ $decoded = json_decode($value, true);
+ if (is_array($decoded) && isset($decoded['type']) && $decoded['type'] === 'doc') {
+ $component->state($decoded);
+ }
+ } catch (\Exception $e) {
+ // Invalid JSON, skip
+ }
+ }
+ })
->dehydrated(false)
->columnSpanFull(),
@@ -286,7 +330,13 @@ class PageForm
->visible(fn (Get $get) => $get('type') === 'markdown')
->live(onBlur: true)
->afterStateUpdated(fn ($state, callable $set) => $set('value', $state))
- ->afterStateHydrated(fn ($component, $state, Get $get) => $component->state($get('value')))
+ ->afterStateHydrated(function ($component, $state, Get $get) {
+ if ($get('type') !== 'markdown') return;
+ $value = $get('value');
+ if ($value !== null && is_string($value)) {
+ $component->state($value);
+ }
+ })
->dehydrated(false)
->columnSpanFull(),
@@ -300,7 +350,13 @@ class PageForm
->imageEditor()
->live()
->afterStateUpdated(fn ($state, callable $set) => $set('value', $state))
- ->afterStateHydrated(fn ($component, $state, Get $get) => $component->state($get('value')))
+ ->afterStateHydrated(function ($component, $state, Get $get) {
+ if ($get('type') !== 'image') return;
+ $value = $get('value');
+ if ($value !== null && is_string($value)) {
+ $component->state($value);
+ }
+ })
->dehydrated(false)
->columnSpanFull(),
@@ -312,7 +368,13 @@ class PageForm
->directory('pages/sections')
->live()
->afterStateUpdated(fn ($state, callable $set) => $set('value', $state))
- ->afterStateHydrated(fn ($component, $state, Get $get) => $component->state($get('value')))
+ ->afterStateHydrated(function ($component, $state, Get $get) {
+ if ($get('type') !== 'file') return;
+ $value = $get('value');
+ if ($value !== null && is_string($value)) {
+ $component->state($value);
+ }
+ })
->dehydrated(false)
->columnSpanFull(),
@@ -322,7 +384,13 @@ class PageForm
->visible(fn (Get $get) => $get('type') === 'boolean')
->live()
->afterStateUpdated(fn ($state, callable $set) => $set('value', $state))
- ->afterStateHydrated(fn ($component, $state, Get $get) => $component->state($get('value')))
+ ->afterStateHydrated(function ($component, $state, Get $get) {
+ if ($get('type') !== 'boolean') return;
+ $value = $get('value');
+ if ($value !== null && is_bool($value)) {
+ $component->state($value);
+ }
+ })
->dehydrated(false)
->columnSpanFull(),
@@ -332,7 +400,13 @@ class PageForm
->visible(fn (Get $get) => $get('type') === 'color')
->live(onBlur: true)
->afterStateUpdated(fn ($state, callable $set) => $set('value', $state))
- ->afterStateHydrated(fn ($component, $state, Get $get) => $component->state($get('value')))
+ ->afterStateHydrated(function ($component, $state, Get $get) {
+ if ($get('type') !== 'color') return;
+ $value = $get('value');
+ if ($value !== null && is_string($value)) {
+ $component->state($value);
+ }
+ })
->dehydrated(false)
->columnSpanFull(),
@@ -343,7 +417,13 @@ class PageForm
->displayFormat('d/m/Y')
->live()
->afterStateUpdated(fn ($state, callable $set) => $set('value', $state))
- ->afterStateHydrated(fn ($component, $state, Get $get) => $component->state($get('value')))
+ ->afterStateHydrated(function ($component, $state, Get $get) {
+ if ($get('type') !== 'date') return;
+ $value = $get('value');
+ if ($value !== null && is_string($value)) {
+ $component->state($value);
+ }
+ })
->dehydrated(false)
->columnSpanFull(),
@@ -355,7 +435,13 @@ class PageForm
->seconds(false)
->live()
->afterStateUpdated(fn ($state, callable $set) => $set('value', $state))
- ->afterStateHydrated(fn ($component, $state, Get $get) => $component->state($get('value')))
+ ->afterStateHydrated(function ($component, $state, Get $get) {
+ if ($get('type') !== 'datetime') return;
+ $value = $get('value');
+ if ($value !== null && is_string($value)) {
+ $component->state($value);
+ }
+ })
->dehydrated(false)
->columnSpanFull(),
@@ -370,7 +456,13 @@ class PageForm
)
->live(onBlur: true)
->afterStateUpdated(fn ($state, callable $set) => $set('value', $state))
- ->afterStateHydrated(fn ($component, $state, Get $get) => $component->state($get('value')))
+ ->afterStateHydrated(function ($component, $state, Get $get) {
+ if ($get('type') !== 'array') return;
+ $value = $get('value');
+ if ($value !== null && is_array($value)) {
+ $component->state($value);
+ }
+ })
->dehydrated(false)
->columnSpanFull(),
])