strapi-plugin-copy-any-component 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/USAGE.md ADDED
@@ -0,0 +1,121 @@
1
+ # Component Copy Plugin - Kullanım Rehberi
2
+
3
+ ## Temel Kullanım
4
+
5
+ ### 1. Plugin'e Erişim
6
+
7
+ Strapi admin panelinde sol menüden **Plugins > Component Copy** seçeneğine tıklayın.
8
+
9
+ ### 2. Sayfa Seçimi
10
+
11
+ - **Source Page (Kaynak Sayfa)**: Component'leri kopyalamak istediğiniz sayfayı seçin
12
+ - **Target Page (Hedef Sayfa)**: Component'lerin kopyalanacağı sayfayı seçin
13
+
14
+ ### 3. Component Kopyalama
15
+
16
+ 1. Source Page panelinden bir component'i seçin
17
+ 2. Component'i sürükleyip Target Page paneline bırakın
18
+ 3. Component belirtilen pozisyona kopyalanacaktır
19
+
20
+ ### 4. Component Sıralama
21
+
22
+ Target Page panelinde component'leri sürükleyerek sıralayabilirsiniz:
23
+ - Component'i tutun ve istediğiniz pozisyona sürükleyin
24
+ - Component otomatik olarak yeni pozisyonuna taşınacaktır
25
+
26
+ ### 5. Değişiklikleri Kaydetme
27
+
28
+ 1. Yaptığınız değişiklikler otomatik olarak draft olarak kaydedilir
29
+ 2. Değişiklikleri yayınlamak için **Publish** butonuna tıklayın
30
+ 3. Başarılı olduğunda bir onay mesajı görüntülenecektir
31
+
32
+ ## Özellikler
33
+
34
+ ### Aynı Sayfada Kopyalama
35
+
36
+ Aynı sayfayı hem source hem de target olarak seçebilirsiniz:
37
+ - Bu durumda component'ler duplicate (çoğaltılır) olur
38
+ - Aynı sayfa içinde component'leri çoğaltabilirsiniz
39
+
40
+ ### Detaylı Bilgi Görüntüleme
41
+
42
+ Component kopyalandıktan sonra:
43
+ - Başarı mesajına tıklayarak detaylı bilgi modal'ını açabilirsiniz
44
+ - Hangi alanların kopyalandığını görebilirsiniz
45
+ - Hangi alanların kopyalanamadığını (örn: sistem alanları) görebilirsiniz
46
+ - Media dosyalarının kopyalanma durumunu görebilirsiniz
47
+
48
+ ### Component Önizleme
49
+
50
+ Her component için:
51
+ - Component tipi (badge olarak gösterilir)
52
+ - Component içeriğinin önizlemesi (title, description vb.)
53
+ - Drag handle (sürükleme için)
54
+
55
+ ## Kullanım Senaryoları
56
+
57
+ ### Senaryo 1: Yeni Sayfaya Component Kopyalama
58
+
59
+ 1. Source Page: "Ana Sayfa"
60
+ 2. Target Page: "Hakkımızda"
61
+ 3. Ana Sayfa'dan Hero Section'ı sürükle
62
+ 4. Hakkımızda sayfasına bırak
63
+ 5. Publish et
64
+
65
+ ### Senaryo 2: Aynı Sayfada Component Çoğaltma
66
+
67
+ 1. Source Page: "İletişim"
68
+ 2. Target Page: "İletişim" (aynı sayfa)
69
+ 3. Form Section'ı sürükle
70
+ 4. Aynı sayfanın sonuna bırak
71
+ 5. Publish et
72
+
73
+ ### Senaryo 3: Component Sıralama
74
+
75
+ 1. Target Page'i seç
76
+ 2. Component'leri istediğiniz sıraya göre sürükle
77
+ 3. Değişiklikler otomatik kaydedilir
78
+ 4. Publish et
79
+
80
+ ## İpuçları
81
+
82
+ 1. **Çoklu Kopyalama**: Şu anda bir seferde bir component kopyalanabilir. Birden fazla component için işlemi tekrarlayın.
83
+
84
+ 2. **Undo**: Şu anda geri alma özelliği yok. Değişikliklerden önce yedek alın.
85
+
86
+ 3. **Publish**: Draft olarak kaydedilen değişiklikler yayınlanana kadar frontend'de görünmez.
87
+
88
+ 4. **Media Dosyaları**: Media dosyaları referans olarak kopyalanır, yeni dosya oluşturulmaz.
89
+
90
+ 5. **Relations**: Single type relation'lar (örneğin siteSettings) kopyalanır ancak target sayfada mevcut relation kullanılır.
91
+
92
+ ## Kısıtlamalar
93
+
94
+ 1. **System Fields**: `id`, `documentId`, `createdAt`, `updatedAt`, `createdBy`, `updatedBy`, `publishedAt`, `locale` gibi sistem alanları otomatik olarak kaldırılır.
95
+
96
+ 2. **Complex Relations**: Çok karmaşık relation'lar kopyalanmayabilir. Test edin.
97
+
98
+ 3. **Validation**: Component schema'larındaki validation kurallarına uygun veriler gerekir.
99
+
100
+ 4. **Permissions**: Gerekli izinlere sahip olmanız gerekir.
101
+
102
+ ## Sorun Giderme
103
+
104
+ ### Component kopyalanmıyor
105
+
106
+ - İzinleri kontrol edin
107
+ - Browser console'da hata var mı bakın
108
+ - Network tab'inde API isteği başarılı mı kontrol edin
109
+
110
+ ### Modal açılmıyor
111
+
112
+ - Tarayıcı cache'ini temizleyin
113
+ - Sayfayı yenileyin (F5)
114
+ - Strapi'yi yeniden başlatın
115
+
116
+ ### Component'ler görünmüyor
117
+
118
+ - Sayfaların yayınlandığından emin olun
119
+ - Dynamic zone'ın doğru yapılandırıldığını kontrol edin
120
+ - Component'lerin populate edildiğinden emin olun
121
+
@@ -0,0 +1,3 @@
1
+ // Bu dosya artık kullanılmıyor, HomePage.jsx kullanılıyor
2
+ export default null;
3
+
@@ -0,0 +1,22 @@
1
+ import { useEffect, useRef } from "react";
2
+ import { PLUGIN_ID } from "../pluginId";
3
+
4
+ const Initializer = ({ setPlugin }) => {
5
+ const ref = useRef(false);
6
+
7
+ useEffect(() => {
8
+ if (!ref.current && setPlugin) {
9
+ try {
10
+ setPlugin({ id: PLUGIN_ID, isReady: true });
11
+ ref.current = true;
12
+ } catch (error) {
13
+ console.error("Plugin initializer error:", error);
14
+ }
15
+ }
16
+ }, [setPlugin]);
17
+
18
+ return null;
19
+ };
20
+
21
+ export { Initializer };
22
+
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+
3
+ const PluginIcon = () => (
4
+ <svg
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ >
11
+ <path
12
+ d="M8 5H16C17.1 5 18 5.9 18 7V21L12 17L6 21V7C6 5.9 6.9 5 8 5Z"
13
+ stroke="currentColor"
14
+ strokeWidth="2"
15
+ strokeLinecap="round"
16
+ strokeLinejoin="round"
17
+ />
18
+ </svg>
19
+ );
20
+
21
+ export { PluginIcon };
22
+
@@ -0,0 +1,27 @@
1
+ import { PLUGIN_ID } from "./pluginId";
2
+ import { PluginIcon } from "./components/PluginIcon";
3
+
4
+ export default {
5
+ register(app) {
6
+ app.addMenuLink({
7
+ to: `plugins/${PLUGIN_ID}`,
8
+ icon: PluginIcon,
9
+ intlLabel: {
10
+ id: `${PLUGIN_ID}.plugin.name`,
11
+ defaultMessage: "Copy Any Component",
12
+ },
13
+ Component: async () => {
14
+ const component = await import("./pages/HomePage");
15
+ return component.default;
16
+ },
17
+ });
18
+
19
+ app.registerPlugin({
20
+ id: PLUGIN_ID,
21
+ isReady: true,
22
+ name: PLUGIN_ID,
23
+ });
24
+ },
25
+ bootstrap() {},
26
+ };
27
+