Skip to content

Added save and add next button#143

Merged
amikhaylin merged 1 commit intomasterfrom
save-and-add-next
Sep 2, 2025
Merged

Added save and add next button#143
amikhaylin merged 1 commit intomasterfrom
save-and-add-next

Conversation

@amikhaylin
Copy link
Copy Markdown
Owner

No description provided.

Copy link
Copy Markdown

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code review by ChatGPT


private func setDueDate(task: Todo) {
switch list {
case .inbox:
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ваше изменение кода демонстрирует хороший подход к рефакторингу путем выделения общей логики сохранения в отдельный метод save(). Это повышает читаемость и повторное использование кода. Однако есть несколько аспектов, которые можно улучшить:

  1. Обработка ошибок:
    Методы, связанные с сохранением данных (modelContext.insert(task) и task.reconnect()), могут потенциально вызвать ошибки. Рекомендуется добавить обработку ошибок, чтобы обеспечить надежность приложения. Например:

    private func save() {
        let task = Todo(name: taskName, link: link)
        if dueToday {
            task.setDueDate(dueDate: Calendar.current.startOfDay(for: Date()))
        } else if project == nil && mainTask == nil {
            setDueDate(task: task)
        }
        
        if let mainTask = mainTask {
            mainTask.subtasks?.append(task)
        }
        
        if let project = project {
            task.status = project.getDefaultStatus()
            task.project = project
        }
        
        do {
            modelContext.insert(task)
            try modelContext.save()
            task.reconnect()
        } catch {
            // Обработайте ошибку, например, покажите пользователю сообщение
            print("Ошибка при сохранении задачи: \(error)")
        }
    }
  2. Асинхронность операций:
    Если modelContext.save() является асинхронной операцией, стоит рассмотреть использование async/await для обеспечения плавного выполнения и обновления UI после завершения сохранения.

  3. Валидация ввода:
    В текущей реализации пользователь может сохранить задачу с пустым именем или ссылкой. Рекомендуется добавить валидацию ввода перед сохранением, чтобы гарантировать корректность данных. Например:

    private func canSave() -> Bool {
        return !taskName.trimmingCharacters(in: .whitespaces).isEmpty
    }

    И использовать это состояние для активации/деактивации кнопок сохранения:

    Button("OK") {
        save()
        self.isVisible = false
    }
    .disabled(!canSave())
  4. Повторное использование кода в кнопках:
    В кнопке "Save and Add next" происходит сброс taskName и link после сохранения. Возможно, стоит вынести эту логику в отдельный метод или параметризировать функцию save(), чтобы она принимала флаг, указывающий, нужно ли сбрасывать поля после сохранения.

    private func save(resetFields: Bool = false) {
        // Логика сохранения
        if resetFields {
            taskName = ""
            link = ""
        }
    }

    И использовать ее так:

    Button("Save and Add next") {
        save(resetFields: true)
    }
  5. Улучшение UX:
    После сохранения задачи, особенно при использовании "Save and Add next", полезно дать пользователю визуальную обратную связь, например, краткий всплывающий индикатор успешного сохранения.

  6. Управление доступностью:
    Уже присутствует accessibility(identifier: "SaveTask"), что хорошо. Убедитесь, что все интерактивные элементы имеют соответствующие идентификаторы и описания для обеспечения доступности приложения.

  7. Документация и комментарии:
    Хотя вы и просили не комментировать работающий код, полезно добавить комментарии к новым методам или сложной логике, чтобы облегчить понимание кода для других разработчиков.

  8. Тестирование:
    Убедитесь, что после внесенных изменений есть соответствующие юнит-тесты, покрывающие сценарии сохранения задач, включая проверки на правильное поведение при различных условиях (наличие project, mainTask, dueToday и т.д.).

Внедрение этих улучшений поможет сделать код более надежным, удобным для поддержки и улучшит общий опыт пользователя.

CURRENT_PROJECT_VERSION = 63;
DEAD_CODE_STRIPPING = YES;
GENERATE_INFOPLIST_FILE = YES;
MACOSX_DEPLOYMENT_TARGET = 14.0;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Внесение изменений в CURRENT_PROJECT_VERSION выглядит последовательным, что хорошо для поддержания согласованности версии проекта во всех конфигурациях и таргетах. Однако, есть несколько аспектов, которые стоит учесть для улучшения процесса:

  1. Централизация управления версиями:

    • Рассмотрите возможность использования централизованного файла конфигурации или скрипта для управления версиями. Это поможет избежать ручного обновления версии в различных местах и снизит риск ошибок.
  2. Автоматизация обновления версий:

    • Использование инструментов автоматизации, таких как Fastlane или Git Hooks, может облегчить процесс инкрементирования версий и обеспечить более надежное управление версиями при каждом коммите или релизе.
  3. Согласованность MARKETING_VERSION:

    • Проверьте, требуется ли также обновление MARKETING_VERSION в соответствующих местах. Иногда CURRENT_PROJECT_VERSION (build number) и MARKETING_VERSION (версия для пользователей) должны быть синхронизированы или обновляться согласованно.
  4. Документация изменений:

    • Добавьте описание в pull request, объясняющее причину изменения версии. Это поможет команде понимать контекст изменений и избежать путаницы в будущем.
  5. Проверка совместимости:

    • Убедитесь, что изменение версии не нарушает совместимость с зависимостями или другими компонентами проекта. Возможно, потребуется обновить зависимости или провести дополнительные тесты.
  6. Использование Semantic Versioning:

    • Если еще не используете, рассмотрите внедрение семантического версионирования (SemVer) для более четкого управления версиями, что облегчит понимание изменений между релизами.
  7. Обновление связанных ресурсов:

    • Проверьте, не требуют ли изменения версии обновления в Info.plist или других связанных файлах, чтобы обеспечить полную согласованность версии во всем приложении.

Следуя этим рекомендациям, вы сможете улучшить процесс управления версиями в проекте, сделать его более надежным и автоматизированным, а также обеспечить лучшую прозрачность для всей команды.

}

private func setDueDate(task: Todo) {
switch list {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ваш код показывает хорошие усилия по улучшению структуры и удобства использования. Вот несколько конструктивных замечаний и предложений для дальнейшего улучшения:

  1. Разделение логики сохранения:

    • Отличная идея вынести логику сохранения в отдельный метод save(). Это повышает читаемость и облегчает поддержку кода.
    • Рассмотрите возможность обработки ошибок внутри метода save(). В текущей реализации, если что-то пойдет не так при вставке задачи или реконнекте, пользователь не будет уведомлен.
  2. Обработка состояния после сохранения:

    • В кнопке "Save and Add next" вы очищаете taskName и link. Убедитесь, что эти свойства привязаны к полям ввода, и что очистка действительно обновляет UI. Возможно, стоит добавить дополнительные проверки или уведомления для пользователя.
  3. UI/UX улучшения:

    • Добавление Spacer() между кнопками улучшает распределение пространства, однако убедитесь, что это не нарушает общий дизайн интерфейса. Проверьте на разных размерах экранов.
    • Подумайте о добавлении анимации или индикатора загрузки при сохранении задачи, чтобы улучшить пользовательский опыт.
  4. Кнопка "OK":

    • После вызова save() и закрытия видимого окна, убедитесь, что все необходимые данные действительно сохранены. Возможно, стоит добавить подтверждение успешного сохранения перед закрытием.
  5. Проверка дублирования кода:

    • Убедитесь, что метод save() не дублирует логику, которая может быть уже реализована в других частях вашего приложения. Это поможет избежать потенциальных багов и упростит поддержку.
  6. Использование клавиатурных сокращений:

    • Вы используете .keyboardShortcut(.cancelAction) и .keyboardShortcut(.defaultAction), что хорошо для доступности. Проверьте, что эти сокращения не конфликтуют с другими функциональными возможностями вашего приложения.
  7. Документация и комментарии:

    • Хотя вы избегаете комментирования работающего кода, полезно добавить краткие комментарии к новым методам или сложной логике внутри save(), чтобы другие разработчики могли быстрее понять вашу реализацию.
  8. Тестирование:

    • После внесенных изменений убедитесь, что все сценарии работают корректно, включая добавление новой задачи, сохранение и добавление следующей, а также закрытие окна без сохранения. Автоматизированные тесты могут помочь в этом процессе.

В целом, изменения направлены в правильную сторону, улучшая структуру и расширяемость кода. Продолжайте уделять внимание обработке ошибок и пользовательскому опыту для достижения наилучших результатов.

},
"Search tasks" : {
"localizations" : {
"ar" : {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ваши изменения по добавлению локализации выглядят в целом правильно, но есть несколько моментов, которые стоит учесть для улучшения качества кода и соответствия лучшим практикам:

  1. Именование ключей локализации:

    • Текущий ключ: "Save and Add next" содержит пробелы и заглавные буквы, что может привести к проблемам с консистентностью и удобством использования в коде.
    • Рекомендация: Используйте более подходящий формат именования, например, saveAndAddNext или save_and_add_next. Это улучшит читаемость и упростит обращение к ключам в коде.
    "saveAndAddNext": {
      "localizations": {
        "en": { ... },
        "ru": { ... }
      }
    }
  2. Перевод на русский язык:

    • Текущий перевод: "Сохранить + новая" может быть не совсем понятен пользователям.
    • Рекомендация: Рассмотрите более естественный перевод, например, "Сохранить и добавить ещё" или "Сохранить и добавить следующую". Это сделает интерфейс более понятным для русскоязычных пользователей.
    "ru": {
      "stringUnit": {
        "state": "translated",
        "value": "Сохранить и добавить ещё"
      }
    }
  3. Структура локализаций:

    • Убедитесь, что структура локализаций соответствует общему формату проекта. Если в других местах используются .strings файлы или иной формат, стоит придерживаться единого подхода.
    • Рекомендация: Если проект использует .strings файлы, возможно, стоит добавить запись там вместо JSON.
  4. Проверка состояния перевода:

    • Поле "state": "translated" предполагает, что перевод уже завершен. Убедитесь, что это состояние соответствует реальному статусу перевода.
    • Рекомендация: Если механизм состояния используется для отслеживания процесса перевода, убедитесь, что все переводы проверены и действительно завершены.
  5. Добавление новых локалей:

    • Убедитесь, что все необходимые языки покрыты. В представленном фрагменте добавлены только en и ru. Если в проекте поддерживаются другие языки, возможно, стоит добавить пустые или временные переводы для них.
    "localizations": {
      "en": { ... },
      "ru": { ... },
      "es": { "stringUnit": { "state": "pending", "value": "" } },
      "fr": { "stringUnit": { "state": "pending", "value": "" } },
      // Добавьте другие языки по необходимости
    }
  6. Использование локализованных строк в SwiftUI:

    • Убедитесь, что строки используются через механизм локализации Swift, например, LocalizedStringKey или NSLocalizedString, чтобы обеспечить правильное отображение локализованных значений.
    Button(LocalizedStringKey("saveAndAddNext")) {
        // Действие кнопки
    }

Внедрение этих рекомендаций поможет улучшить качество локализации, обеспечить консистентность и повысить удобство поддержки кода в будущем.

@amikhaylin amikhaylin merged commit 64e0d09 into master Sep 2, 2025
1 check passed
@amikhaylin amikhaylin deleted the save-and-add-next branch September 2, 2025 07:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant