-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ACC-16 Разлогин/Завершение сессии #17
The head ref may contain hidden characters: "feature/acc-16-\u0440\u0430\u0437\u043B\u043E\u0433\u0438\u043D\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u0435-\u0441\u0435\u0441\u0441\u0438\u0438"
Conversation
ACC-16 Разлогин/Завершение сессии
|
348b752
to
4a913b5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вроде ок, тольк пару вопросов есть)
src/pages/home/model.ts
Outdated
import * as api from '../../api'; | ||
import { sessionDelete } from '../../api'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Как будто что-то пошло не так в импортах)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
да, пропустил, поправлю) на аксессо везде вроде через api. написано
logoutClicked: model.logout.prepend(noop), | ||
}, | ||
}); | ||
|
||
function noop(): void {} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А можешь поделиться пож, что за хак такой с noop
?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
там у logoutClicked и model.logout разные payload по сути это трансформер одного payload в другой, в нашем случае просто пустой)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А поч именно на основании model.logout
решил сделать?
Это же event обычный так понимаю?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это же event обычный так понимаю?
да
А поч именно на основании model.logout решил сделать?
ну я не придумал как для сессии его по другому назвать) unauthorize тоже странно, а delete на сессии будет лучше, но смущает что там есть еще deleteFx(fetch на удаление) и начинаешь запутываться, но по идее будет лучше
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
а для модели home logout нормально в целом выглядит типа - разлогинься из дома
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я просто пытаюсь понять, какой плюс, что ты одно событие на основании другого делаешь
Тип когда будет срабатывать событие logout
- будет всегда срабатывать и событие logoutClicked
?
Так ли тогда нужно отдельное событие с prepend?
export const logoutClicked = createEvent<React.MouseEvent<HTMLButtonElement>>(); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А событие точно в UI должно создаваться? Мб на уровень модели вынести?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
конкретно в этом случае возможно, думал, что может еще придется менять и еще что то по клику делать, в целом оно все равно биндится в контракте
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ну я бы постарался не раздувать UI-сегмент такими штуками из модели)
Но решать тебе офк
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
предлагаешь прокинуть напрямую из модели? через bind на contract ? его придется просто класть в модели как event от mouse click, что кажется странным, типа зачем модели знать про какие то клики
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
типа зачем модели знать про какие то клики
Точно так же можно и сказать "Зачем UI знать про какие-то createEvent")))
Я бы все события / БЛ объявлял в модели (привет фиче-слайсам) , а в UI лишь переиспользовал их в инкапсулированном виде, не залезая в реализацию
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вот здесь Сова тож хорошо про "инкапсулированность" БЛ от UI внутри модели раскрывает
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Крч я не особо против такого подхода, просто пытаюсь понять причины изначальные)
Тип если не хватает текущих событий (а там вродь как event.logout
есть) - то можно создать рядом еще одно и его переюзать)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Чтобы страница не импортировала модель
const Failure = reflect({ | ||
view: ({ showError }: { showError: boolean }) => | ||
showError ? ( | ||
<ErrorText>Something went wrong! Please, try again later</ErrorText> | ||
) : null, | ||
bind: { | ||
showError: $showError, | ||
}, | ||
}); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Так понимаю в effector принято так писать, хотя и выглядит для меня как blackMagic + overengineering))
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
я сам не мастер, в accesson reflect уважается, я смотрел немного исходники, по сути просто биндинги под капот reflect спрятали, из-за этого отрезался api но упростился вид, если нужен полный api то придется все равно по старинке писать)
sample({ | ||
source: guard({ | ||
source: logout, | ||
filter: sessionDeleteFx.pending.map((is) => !is), | ||
}), | ||
target: sessionDeleteFx, | ||
fn: (_) => ({ body: { deleteAllSessions: true } }), | ||
}); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А можешь пож расписать, что тут происходит?
В эффекторе ньюфаг пока)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не смотря на то что, Sample cчитается "выборкой" со специальной семантикой, я предпочитаю смотреть на него как расширенный forward(from, to) который по сути перекидывает event из одного места в другое, но с настройками на частоту обновления и возможность модификации данных,
Guard просто работает как фильтр
Как итог получается получается - мы берем событие logout(которое триггерит клик), не отсылаем его пока эффект(запрос) находится в pending и пересылаем его в эффект(запрос), с хардкодными данными(в будущем видимо чекбокс будет)
То есть такой throttle/debounce по условию, чтобы лишние клики просто игнорить)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Спс за разъяснение)
Тогда да, рили работает примерно как думал
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pending.map((is) => !is),
А тут .map
это кастомно встроенный обработчик (не Array.prototype.map), который позволяет смаппить во что-то состояние эффекта? Или что-то другое?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
да это по сути store.map т.к. pending это Store
@dmi-ch А можешь еще пож в двух словах описать - для чего Он именно про то самое "Окно с формами авторизации / регистрации Accesso" , которое в проектах будет открываться? |
Да, регистрацию авторизацию и восстановление паролей уже Сергей сделал, это уже конкретно домашняя страничка, по идее как то будет список приложений еще(или только в админке, я точно не знаю), там еще отдельно будет редирект видимо на нужную страничку |
PullRequest checklist
Please, review this checklist, check your work to compliance and mark checkboxes as completed
Branch name
feature/
orfix/
orchore/
orrefactor/
ortests/
-
Example:
PullRequest
re #123
just to link,closes #123
orfixes #123
to close)yarn commit
by conventional-commits