fix: resolve issues #194, #195, #196, #197

- #194: Send full date format object instead of just format string to prevent JSON parse errors
- #195: Remove non-functional forgot password link, fix README port 3005 -> 3000
- #196: Use ADMIN_PASSWORD env var in migration, update existing user in create-admin script instead of failing
- #197: Convert camelCase filter keys to snake_case in photo export to match backend PhotoFilterBuilder
This commit is contained in:
Paul Nothaft
2026-02-22 22:34:44 +01:00
parent 26ec9666b9
commit 33483cf32d
6 changed files with 48 additions and 31 deletions
@@ -75,7 +75,20 @@ export const PhotoExportMenu: React.FC<PhotoExportMenuProps> = ({
if (selectedPhotoIds.length > 0) {
options.photo_ids = selectedPhotoIds;
} else if (filters) {
options.filter = filters;
// Convert camelCase filter keys to snake_case for backend
options.filter = {
min_rating: filters.minRating,
max_rating: filters.maxRating,
has_likes: filters.hasLikes,
min_likes: filters.minLikes,
has_favorites: filters.hasFavorites,
min_favorites: filters.minFavorites,
has_comments: filters.hasComments,
category_id: filters.categoryId,
logic: filters.logic,
sort: filters.sort,
order: filters.order,
};
}
exportMutation.mutate(options);
@@ -256,11 +256,7 @@ export function useSettingsState() {
mutationFn: async () => {
const settingsData: Record<string, unknown> = {};
Object.entries(generalSettings).forEach(([key, value]) => {
if (key === 'date_format' && typeof value === 'object' && value.format) {
settingsData[`general_${key}`] = value.format;
} else {
settingsData[`general_${key}`] = value;
}
settingsData[`general_${key}`] = value;
});
return settingsService.updateSettings(settingsData);
},
+1 -4
View File
@@ -200,7 +200,7 @@ export const AdminLoginPage: React.FC = () => {
</div>
</div>
{/* Remember Me & Forgot Password */}
{/* Remember Me */}
<div className="flex items-center justify-between">
<label className="flex items-center">
<input
@@ -209,9 +209,6 @@ export const AdminLoginPage: React.FC = () => {
/>
<span className="ml-2 text-sm text-neutral-700">{t('adminLogin.rememberMe')}</span>
</label>
<a href="#" className="text-sm text-primary-600 hover:text-primary-700">
{t('adminLogin.forgotPassword')}
</a>
</div>
{/* reCAPTCHA */}