Skip to content

Instantly share code, notes, and snippets.

@popuguytheparrot
Created January 15, 2020 12:36
Show Gist options
  • Save popuguytheparrot/54e08ae63ddc0f55203bf3bb0de8e0cf to your computer and use it in GitHub Desktop.
Save popuguytheparrot/54e08ae63ddc0f55203bf3bb0de8e0cf to your computer and use it in GitHub Desktop.
import { createEvent, createStore, combine, sample, forward } from 'effector';
import { accessTypes } from 'constants/access-type';
/**
*
* @type {Event<{title, content, contentText, cb}>}
*/
export const openPopover = createEvent('open Popover');
export const closePopover = createEvent('close Popover');
export const agree = createEvent('agree');
export const disagree = createEvent('disagree');
export const confirm = createEvent('confirm action');
export const remoteAccess = createEvent('remote access');
export const $popoverState = createStore(false)
.on(openPopover, () => true)
.reset(closePopover, disagree, agree);
export const $popoverContent = createStore({
title: '',
content: null,
contentText: '',
cb: () => {}
}).reset(closePopover, disagree, agree);
$popoverContent.watch(console.log);
$popoverContent.on(openPopover, (_, { title, contentText = '', content, cb }) => ({
title,
contentText,
content,
cb
}));
export const $popover = combine({
state: $popoverState,
data: $popoverContent
});
$popover.watch(s => console.log('$popover', s));
forward({
from: confirm.map(({ content, cb }) => ({
title: 'Подтвердите действие',
contentText: content,
cb
})),
to: openPopover
});
forward({
from: remoteAccess.map(({ taskType, port }) => ({
title: taskType,
contentText: `${accessTypes[taskType]} ${port}`
})),
to: openPopover
});
const agreeEvent = sample({
source: confirm,
clock: agree
});
agreeEvent.watch(({ cb }) => cb());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment