В списке задач выводить кнопки запуска таймеров для неавторизованных пользователей

Завершена

Проект: freecode.academy

Планируемый запуск: 22.01.2021Дата начала: Планируемое завершение: 23.01.2021Дата завершения:

Описание задачи

Пользователь должен видеть, что есть такая функция. При клике он получит сообщение "Необходимо авторизоваться".

  1. Технология
    Требуемый уровень
  2. 2
Олег, как видишь, задача просто решалась. Сейчас-то, после того, как ты подосвоил TS, более понятно?
Ну как тебе сказать с одной стороны теперь понимаю примерно, что ты делаешь, но сам, думаю пока такую логику не потянул.

Во-первых я так понимаю useUpdateTimerProcessorMutation() - это кастомный хук, как создовать кастомные хуки пока не изучал, но примерно понятно.

Во-вторых не совсем еще разобрался с деструктуризацией у тебя там ее тоже хватает и с приниципами написания сложных функций пока плаваю.

Короче думаю без пошагового объяснения не справился, но с виду выглядит не очень сложно конечно.
Так а что там понимать? Там почти все изменения, что видны в коммите - это просто сдвиг табов, потому что выдернуто из логики if (currentUser)
Просто раньше кнопка не выводилась, потому что вся логика ее отображения была обернута в if (currentUser). Нет пользователя (currentUser) - нет никакого вывода вообще.
Сейчас я убрал обертку по этому условию (то есть какая-то кнопка из двух в любом случае отображается), но логика теперь такая:

Получаем активную задачу пользователя если "пользователь есть и его id совпадает с id пользователя задачи".
const activeTimer = currentUser && activeTimers.find((n) => n.CreatedBy?.id === currentUser.id)
Если активная задача была получена if (activeTimer), то выводим кнопку стоп.
Иначе (во всех иных случаях) выводим кнопку старт.

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

>> Во-первых я так понимаю useUpdateTimerProcessorMutation()
Это генерируемые хуки для GraphQL-запросов, но они, в рамках текущей задачи, тебя вообще не решались. Там только и надо было что поменять условие рендеринга, все, больше ничего не надо было трогать.


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

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


// Массив кнопок, который мы в процессе набиваем и возвращаем. Сейчас пустой. const buttons: JSX.Element[] = [] // Проверяем есть ли вообзе входящий объект. Если нет, то дальнейшая логика вообще отсутствует if (object) { // Получаем свойства объекта const { id: taskId, Timers } = object // Получаем свойства из контекста (в данном случае текущего пользователя) const { user: currentUser } = context // Массив всех активных таймеров const activeTimers = Timers ? Timers.filter((n) => n.stopedAt === null) : [] // Получаем активный таймер, если текущий пользователь вообще имеется const activeTimer = currentUser && activeTimers.find((n) => n.CreatedBy?.id === currentUser.id) // Если есть активная задача if (activeTimer) { const { id: timerId } = activeTimer // То добавляем кнопку в массив возвращаемых buttons.push( <IconButton key="stop" value={timerId} onClick={onClickUpdateTimer} disabled={loading} > <StopIcon /> </IconButton> ) } // Иначе else { // Добавляем кнопку для старта задачи buttons.push( <IconButton key="start" value={taskId} onClick={onClickCreateTimer} disabled={loading} > <StartIcon /> </IconButton> ) } }
Что здесь не ясно?

Вот здесь наверняка тебе все ясно. Но ты испугался чего-то увиденного за пределами поставленной задачи вообще. И все: "Я того не понимаю, поэтому и тут не понимаю".
Здесь согласен все понятно, хороший урок на будущее, теперь буду отталкиваться от того, что понятно:)
>> теперь буду отталкиваться от того, что понятно:)

Ты правильный вывод сделал. И на самом деле только так и можем. Нас учат простому, чтобы потом можно было с этими знаниями понять что-то более сложное, но не наоборот.

Добавить комментарий