* Add api methods for subscription * Small changes * little changes in remark.tsx * disallow pass className to Button and Input * Subscribe block * add RSS and Email subscription drobdowns * add hook useTheme * unify dropdown import/export * Change API * rename subscribe methods * add unsubscribe method * Add email subscription to settings and user * Refactor and add new steps * render by single component * add final step * add unsubscribe step it user is subscribed * Add tests * Update subscription logic * test without mocking redux methods but with mocking store * update user in store after subscribe and unsubscribe * little changes in subscription flow * fix drobdown size * Fix RSS subscription link for site * fix link * add test for RSS subscription * Fix showing email subscription * it don't show to unauth users * it don't show to anonymous users * it tested * isUserAnonymous is a bit rewrited * isUserAnonymous is tested * Make Email button visible for anon users * React X supporst Fragments thats why .babelrc changed * disabled button is more visible * fix hovering on disabled buttons * create mocks for tests * move email dropdown to __subscribe-by-email
27 lines
766 B
TypeScript
27 lines
766 B
TypeScript
/** @jsx createElement */
|
|
import { createElement, JSX } from 'preact';
|
|
import { forwardRef } from 'preact/compat';
|
|
import b, { Mods, Mix } from 'bem-react-helper';
|
|
import { Theme } from '@app/common/types';
|
|
|
|
interface Props extends Omit<JSX.HTMLAttributes, 'size' | 'className'> {
|
|
kind?: 'primary' | 'secondary' | 'link';
|
|
size?: 'middle' | 'large';
|
|
theme?: Theme;
|
|
mods?: Mods;
|
|
mix?: Mix;
|
|
type?: string;
|
|
}
|
|
|
|
export const Button = forwardRef<HTMLButtonElement, Props>(
|
|
({ children, theme, mods, mix, kind, type = 'button', size, ...props }) => {
|
|
const className = b('button', { mods: { kind, size }, mix }, { theme, ...mods });
|
|
|
|
return (
|
|
<button className={className} type={type} {...props}>
|
|
{children}
|
|
</button>
|
|
);
|
|
}
|
|
);
|