Fix TypeScript errors for Netlify Identity integration

- Add proper TypeScript types for Netlify Identity in env.d.ts
- Define NetlifyUser and NetlifyIdentity interfaces
- Fix ESLint errors by removing 'any' types
- Add optional chaining for safe access
- Apply code formatting with Prettier

All TypeScript, ESLint, and Prettier checks now pass successfully.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Buğra
2025-07-10 01:01:12 +03:00
parent 733be12298
commit a9dce67054
6 changed files with 75 additions and 13 deletions
+14
View File
@@ -1,11 +1,13 @@
# Decap CMS Setup for ARC Website
## Overview
This website uses Decap CMS (formerly Netlify CMS) for content management. It allows authorized users to create, edit, and manage blog posts through a web interface.
## Setup Instructions
### 1. Enable Netlify Identity
1. Go to your Netlify dashboard
2. Navigate to your site settings
3. Go to "Identity" tab
@@ -16,17 +18,20 @@ This website uses Decap CMS (formerly Netlify CMS) for content management. It al
- Git Gateway: Enable this service
### 2. Configure Git Gateway
1. In your site's Identity settings
2. Go to "Services" tab
3. Enable "Git Gateway"
4. This allows Decap CMS to commit directly to your GitHub repository
### 3. Invite Users
1. In Identity tab, click "Invite users"
2. Enter email addresses of content editors
3. They will receive invitation emails
### 4. Access the CMS
- CMS URL: `https://your-site.netlify.app/admin/`
- Users can log in with their invited credentials
- The CMS will redirect to `/decapcms/` for the actual interface
@@ -34,11 +39,13 @@ This website uses Decap CMS (formerly Netlify CMS) for content management. It al
## Features
### Turkish Interface
- All field labels are in Turkish
- Configured for Turkish content creators
- Default author set to "TA1SPH"
### Blog Post Management
- Create new blog posts
- Edit existing posts
- Upload featured images
@@ -46,6 +53,7 @@ This website uses Decap CMS (formerly Netlify CMS) for content management. It al
- Markdown editor for content
### File Structure
- Blog posts are stored in `src/data/post/`
- Images are stored in `src/assets/images/`
- Posts use the format: `YYYY-MM-DD-slug.md`
@@ -53,16 +61,20 @@ This website uses Decap CMS (formerly Netlify CMS) for content management. It al
## Configuration Files
### `/public/decapcms/config.yml`
Main configuration file that defines:
- Backend (Git Gateway)
- Collections (Blog posts)
- Fields and their types
- Media handling
### `/public/decapcms/index.html`
The CMS interface HTML file
### `/public/_redirects`
Netlify redirect rules for admin routing
## Usage
@@ -85,10 +97,12 @@ Netlify redirect rules for admin routing
## Troubleshooting
### Common Issues:
1. **Can't log in**: Check if Identity is enabled and user is invited
2. **Can't save posts**: Ensure Git Gateway is enabled
3. **Images not uploading**: Check media folder permissions
4. **Changes not deploying**: Verify GitHub Actions workflow
### Support
For technical issues, contact the development team or check the Decap CMS documentation at https://decapcms.org/docs/
+26 -3
View File
@@ -18,8 +18,31 @@ collections:
- { label: 'Başlık', name: 'title', widget: 'string' }
- { label: 'Yayın Tarihi', name: 'date', widget: 'datetime', format: 'YYYY-MM-DD HH:mm:ss' }
- { label: 'Yazar', name: 'author', widget: 'string', default: 'TA1SPH' }
- { label: 'Kategoriler', name: 'categories', widget: 'list', allow_add: true, allow_delete: true, collapsed: false, field: { label: 'Kategori', name: 'category', widget: 'string' } }
- { label: 'Etiketler', name: 'tags', widget: 'list', allow_add: true, allow_delete: true, collapsed: false, field: { label: 'Etiket', name: 'tag', widget: 'string' } }
- {
label: 'Kategoriler',
name: 'categories',
widget: 'list',
allow_add: true,
allow_delete: true,
collapsed: false,
field: { label: 'Kategori', name: 'category', widget: 'string' },
}
- {
label: 'Etiketler',
name: 'tags',
widget: 'list',
allow_add: true,
allow_delete: true,
collapsed: false,
field: { label: 'Etiket', name: 'tag', widget: 'string' },
}
- { label: 'Düzen', name: 'layout', widget: 'string', default: 'post' }
- { label: 'Öne Çıkan Görsel', name: 'image', widget: 'image', media_folder: '/src/assets/images', public_folder: '~/assets/images', required: false }
- {
label: 'Öne Çıkan Görsel',
name: 'image',
widget: 'image',
media_folder: '/src/assets/images',
public_folder: '~/assets/images',
required: false,
}
- { label: 'İçerik', name: 'body', widget: 'markdown' }
+3 -3
View File
@@ -13,10 +13,10 @@
<script>
// Initialize Netlify Identity widget
if (window.netlifyIdentity) {
window.netlifyIdentity.on("init", user => {
window.netlifyIdentity.on('init', (user) => {
if (!user) {
window.netlifyIdentity.on("login", () => {
document.location.href = "/admin/";
window.netlifyIdentity.on('login', () => {
document.location.href = '/admin/';
});
}
});
+25
View File
@@ -3,3 +3,28 @@
/// <reference types="astro/client" />
/// <reference types="vite/client" />
/// <reference types="../vendor/integration/types.d.ts" />
// Netlify Identity types
interface NetlifyUser {
id: string;
email: string;
user_metadata: Record<string, unknown>;
app_metadata: Record<string, unknown>;
}
interface NetlifyIdentity {
on: (event: string, callback: (user?: NetlifyUser) => void) => void;
init: () => void;
open: () => void;
close: () => void;
currentUser: () => NetlifyUser | null;
logout: () => void;
}
declare global {
interface Window {
netlifyIdentity?: NetlifyIdentity;
}
}
export {};
+3 -3
View File
@@ -51,10 +51,10 @@ const { language, textDirection } = I18N;
<!-- Netlify Identity initialization -->
<script>
if (window.netlifyIdentity) {
window.netlifyIdentity.on("init", user => {
window.netlifyIdentity.on('init', (user) => {
if (!user) {
window.netlifyIdentity.on("login", () => {
document.location.href = "/admin/";
window.netlifyIdentity?.on('login', () => {
document.location.href = '/admin/';
});
}
});