* feat: API endpoints for email signin * fix: After testing * Initial signin flow working * move shared middleware * feat: Add guest signin toggle, obey on endpoints * feat: Basic email signin when enabled * Improve guest signin email Disable double signin with JWT * fix: Simple rate limiting * create placeholder users in db * fix: Give invited users default avatar add invited users to people settings * test * add transaction * tmp: test CI * derp * md5 * urgh * again * test: pass * test * fix: Remove usage of data values * guest signin page * Visually separator 'Invited' from other people tabs * fix: Edge case attempting SSO signin for guest email account * fix: Correctly set email auth method to cookie * Improve rate limit error display * lint: cleanup / comments * Improve invalid token error display * style tweaks * pass guest value to subdomain * Restore copy link option * feat: Allow invite revoke from people management * fix: Incorrect users email schema does not allow for user deletion * lint * fix: avatarUrl for deleted user failure * change default to off for guest invites * fix: Changing security settings wipes subdomain * fix: user delete permissioning * test: Add user.invite specs
61 lines
1.3 KiB
JavaScript
61 lines
1.3 KiB
JavaScript
// @flow
|
|
import * as React from 'react';
|
|
import styled from 'styled-components';
|
|
import HelpText from 'components/HelpText';
|
|
import VisuallyHidden from 'components/VisuallyHidden';
|
|
|
|
export type Props = {
|
|
checked?: boolean,
|
|
label?: string,
|
|
labelHidden?: boolean,
|
|
className?: string,
|
|
note?: string,
|
|
small?: boolean,
|
|
};
|
|
|
|
const LabelText = styled.span`
|
|
font-weight: 500;
|
|
margin-left: ${props => (props.small ? '6px' : '10px')};
|
|
${props => (props.small ? `color: ${props.theme.textSecondary}` : '')};
|
|
`;
|
|
|
|
const Wrapper = styled.div`
|
|
padding-bottom: 8px;
|
|
${props => (props.small ? 'font-size: 14px' : '')};
|
|
`;
|
|
|
|
const Label = styled.label`
|
|
display: flex;
|
|
align-items: center;
|
|
user-select: none;
|
|
`;
|
|
|
|
export default function Checkbox({
|
|
label,
|
|
labelHidden,
|
|
note,
|
|
className,
|
|
small,
|
|
short,
|
|
...rest
|
|
}: Props) {
|
|
const wrappedLabel = <LabelText small={small}>{label}</LabelText>;
|
|
|
|
return (
|
|
<React.Fragment>
|
|
<Wrapper small={small}>
|
|
<Label>
|
|
<input type="checkbox" {...rest} />
|
|
{label &&
|
|
(labelHidden ? (
|
|
<VisuallyHidden>{wrappedLabel}</VisuallyHidden>
|
|
) : (
|
|
wrappedLabel
|
|
))}
|
|
</Label>
|
|
{note && <HelpText small>{note}</HelpText>}
|
|
</Wrapper>
|
|
</React.Fragment>
|
|
);
|
|
}
|