semantic-ui-react#Button TypeScript Examples
The following examples show how to use
semantic-ui-react#Button.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: Timer.tsx From Riakuto-StartingReact-ja3.1 with Apache License 2.0 | 6 votes |
Timer: VFC<{ limit: number }> = ({ limit }) => {
const [timeLeft, isPrime, reset] = useTimer(limit);
return (
<Card>
<Statistic className="number-board">
<Statistic.Label>time</Statistic.Label>
<Statistic.Value className={isPrime ? 'prime-number' : undefined}>
{timeLeft}
</Statistic.Value>
</Statistic>
<Card.Content>
<Button color="red" fluid onClick={reset}>
<Icon name="redo" />
Reset
</Button>
</Card.Content>
</Card>
);
}
Example #2
Source File: TopBar.tsx From watchparty with MIT License | 6 votes |
render() {
return (
<Popup
content="Create a new room with a random URL that you can share with friends"
trigger={
<Button
color="blue"
size={this.props.size as any}
icon
labelPosition="left"
onClick={this.createRoom}
className="toolButton"
fluid
>
<Icon name="certificate" />
New Room
</Button>
}
/>
);
}
Example #3
Source File: Comments.tsx From communitymap-ui with Apache License 2.0 | 6 votes |
PostCommentWidget: React.FC<{
onComment: (comment: string) => Promise<any>;
}> = ({ onComment }) => {
const [comment, setComment] = useState<string | null>(null);
return (
<div
onClick={(e) => {
// when put into map item click in form input causes the item to expand
e.stopPropagation();
}}
>
<Form
onSubmit={(e) => {
e.preventDefault();
!!comment &&
onComment(comment)
.then(() => setComment(null))
.catch(reportError);
}}
>
<Form.Input
value={comment || ''}
placeholder="Your comment here"
action={<Button icon="send" />}
onChange={(e) => setComment(e.target.value)}
/>
</Form>
</div>
);
}
Example #4
Source File: App.tsx From Riakuto-StartingReact-ja3.1 with Apache License 2.0 | 6 votes |
render(): ReactElement {
const { count } = this.state;
return (
<div className="container">
<header>
<h1>カウンター</h1>
</header>
<Card>
<Statistic className="number-board">
<Statistic.Label>count</Statistic.Label>
<Statistic.Value>{count}</Statistic.Value>
</Statistic>
<Card.Content>
<div className="ui two buttons">
<Button color="red" onClick={() => this.reset()}>
Reset
</Button>
<Button color="green" onClick={() => this.increment()}>
+1
</Button>
</div>
</Card.Content>
</Card>
</div>
);
}
Example #5
Source File: Entrance.tsx From FLECT_Amazon_Chime_Meeting with Apache License 2.0 | 6 votes |
render() {
return (
<div style={{ width: "60%", height: "100%", margin: "auto"}}>
<Form>
<Form.Field>
<label>User Name</label>
<input placeholder='name' ref={this.userNameRef}/>
</Form.Field>
<Form.Field>
<label>Code</label>
<input placeholder='code' ref={this.codeRef}/>
</Form.Field>
<Button type='submit' onClick={()=>this.login()}>Submit</Button>
</Form>
</div>
)
}
Example #6
Source File: Timer.tsx From Riakuto-StartingReact-ja3.1 with Apache License 2.0 | 6 votes |
Timer: VFC<{ limit: number }> = ({ limit }) => {
const [timeLeft, setTimeLeft] = useState(limit);
const reset = (): void => setTimeLeft(limit);
const tick = (): void => setTimeLeft((t) => t - 1);
useEffect(() => {
const timerId = setInterval(tick, 1000);
return () => clearInterval(timerId);
}, []);
// eslint-disable-next-line react-hooks/exhaustive-deps
useEffect(() => {
if (timeLeft === 0) setTimeLeft(limit);
});
return (
<Card>
<Statistic className="number-board">
<Statistic.Label>time</Statistic.Label>
<Statistic.Value>{timeLeft}</Statistic.Value>
</Statistic>
<Card.Content>
<Button color="red" fluid onClick={reset}>
<Icon name="redo" />
Reset
</Button>
</Card.Content>
</Card>
);
}
Example #7
Source File: crewretrieval.tsx From website with MIT License | 6 votes |
ProspectInventory = (props: ProspectInventoryProps) => {
const { polestar, updateProspect } = props;
const [loaned, setLoaned] = React.useState(props.loaned);
return (
<React.Fragment>
{loaned > 0 && (<Button size='mini' circular icon='minus' onClick={(e) => { removeProspect(polestar); e.stopPropagation(); }} />)}
{loaned > 0 ? (<span style={{ margin: '0 .5em' }}>{loaned}</span>) : ''}
<Button size='mini' circular icon='add' onClick={(e) => { addProspect(polestar); e.stopPropagation(); }} />
</React.Fragment>
);
function addProspect(polestar: string): void {
setLoaned(loaned+1);
updateProspect(polestar, true);
}
function removeProspect(polestar: string): void {
setLoaned(loaned-1);
updateProspect(polestar, false);
}
}
Example #8
Source File: MultiSigWallet.tsx From multi-sig-wallet with MIT License | 6 votes |
function MultiSigWallet() {
const { state } = useMultiSigWalletContext();
const [open, openModal] = useState(false);
return (
<div>
<div>Contract: {state.address}</div>
<h3>Balance: {state.balance} wei</h3>
<DepositForm />
<h3>Owners</h3>
<ul>
{state.owners.map((owner, i) => (
<li key={i}>{owner}</li>
))}
</ul>
<div>Confirmations required: {state.numConfirmationsRequired}</div>
<h3>Transactions ({state.transactionCount})</h3>
<Button color="green" onClick={() => openModal(true)}>
Create Transaction
</Button>
{open && <CreateTxModal open={open} onClose={() => openModal(false)} />}
<TransactionList
numConfirmationsRequired={state.numConfirmationsRequired}
data={state.transactions}
count={state.transactionCount}
/>
</div>
);
}
Example #9
Source File: App.tsx From js-examples with MIT License | 6 votes |
renderDropzone = () => {
return (
<Dropzone
onDrop={this.onDrop}
accept={'image/jpeg, image/png, image/gif'}
maxSize={20000000}
multiple={true}
>
{({getRootProps, getInputProps}) => (
<div className="dropzone" {...getRootProps()}>
<input {...getInputProps()} />
<Button
className="icon"
icon="images"
title="add"
/>
<span>DRAG & DROP</span>
</div>
)}
</Dropzone>
)
}
Example #10
Source File: LocalSettings.tsx From watchparty with MIT License | 6 votes |
SettingsModal = ({ trigger }: any) => (
<Modal trigger={trigger} basic closeIcon size="small">
<Header icon="setting" content="Settings" />
<Modal.Content>
<Form>
<TextArea rows={10} id="settings_textarea">
{window.localStorage.getItem('watchparty-setting') ||
JSON.stringify(getDefaultSettings(), null, 2)}
</TextArea>
</Form>
</Modal.Content>
<Modal.Actions>
<Button
color="green"
inverted
onClick={() => {
const newSetting = (document.getElementById(
'settings_textarea'
) as HTMLTextAreaElement)!.value;
try {
validateSettingsString(newSetting);
updateSettings(newSetting);
window.location.reload();
} catch (e) {
alert(e);
}
}}
>
<Icon name="checkmark" />
Save
</Button>
</Modal.Actions>
</Modal>
)
Example #11
Source File: SettingControl.tsx From FLECT_Amazon_Chime_Meeting with Apache License 2.0 | 6 votes |
generateSettingModal = () => {
return (
<Modal onClose={this.settingClose} open={this.state.open}>
<Modal.Header>Setting</Modal.Header>
<Modal.Content>
<Grid>
<Grid.Row>
Virtual background
</Grid.Row>
<Grid.Row>
{this.generateVGSettingPanal()}
</Grid.Row>
</Grid>
</Modal.Content>
<Button content='Close' negative onClick={this.settingClose} />
</Modal>
)
}
Example #12
Source File: SearchResult.tsx From watchparty with MIT License | 6 votes |
YouTubeSearchResult = (
props: SearchResult & { setMedia: Function; playlistAdd: Function }
) => {
const result = props;
const setMedia = props.setMedia;
return (
<Menu.Item
onClick={(e) => {
setMedia(e, { value: result.url });
}}
>
<div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>
<img style={{ height: '50px' }} src={result.img} alt={result.name} />
<Icon color="red" size="large" name="youtube" />
<div>{decodeEntities(result.name)}</div>
<div style={{ marginLeft: 'auto' }}>
<Button
onClick={(e) => {
e.stopPropagation();
e.nativeEvent.stopImmediatePropagation();
props.playlistAdd(e, { value: result.url });
}}
>
Add To Playlist
</Button>
</div>
</div>
</Menu.Item>
);
}
Example #13
Source File: voyagecalculator.tsx From website with MIT License | 5 votes |
VoyageExisting = (props: VoyageExistingProps) => {
const { voyageConfig, allShips, useCalc } = props;
const [CIVASExportFailed, setCIVASExportFailed] = React.useState(false);
const [doingCIVASExport, setDoingCIVASExport] = React.useState(false);
const hoursToTime = hours => {
let wholeHours = Math.floor(hours);
return `${wholeHours}:${Math.floor((hours-wholeHours)*60).toString().padStart(2, '0')}`
}
const exportData = () => new Promise((resolve, reject) => {
setDoingCIVASExport(true);
let estimate = getEstimate({
startAm: voyageConfig.max_hp,
ps: voyageConfig.skill_aggregates[voyageConfig.skills['primary_skill']],
ss: voyageConfig.skill_aggregates[voyageConfig.skills['secondary_skill']],
others: Object.values(voyageConfig.skill_aggregates).filter(s => !Object.values(voyageConfig.skills).includes(s.skill)),
}, () => true).refills[0].result;
let values = [
new Date(voyageConfig.created_at).toLocaleDateString(),
hoursToTime(estimate),
hoursToTime(voyageConfig.log_index/180),
voyageConfig.hp
];
values = values.concat(voyageConfig
.crew_slots
.sort((s1, s2) => CONFIG.VOYAGE_CREW_SLOTS.indexOf(s1.symbol) - CONFIG.VOYAGE_CREW_SLOTS.indexOf(s2.symbol))
.map(s => s.crew.name)
);
navigator.clipboard.writeText(values.join('\n')).then(resolve, reject);
});
return (
<div style={{ marginTop: '1em' }}>
<VoyageStats
voyageData={voyageConfig}
ships={allShips}
showPanels={voyageConfig.state == 'started' ? ['estimate'] : ['rewards']}
/>
<Button onClick={() => useCalc()}>Return to crew calculator</Button>
{(voyageConfig.state == 'recalled' || voyageConfig.state == 'failed') && navigator.clipboard &&
<React.Fragment>
<Button loading={doingCIVASExport} onClick={() => exportData().then(
() => setDoingCIVASExport(false),
() => {
setDoingCIVASExport(false);
setCIVASExportFailed(true);
let timeout = setTimeout(() => {
setCIVASExportFailed(false);
clearTimeout(timeout);
}, 5000);
})}>
Export to CIVAS
</Button>
<Popup
trigger={<Icon name='help' />}
content={
<>
Copies details of the voyage to the clipboard so that it can be pasted into <a href='https://docs.google.com/spreadsheets/d/1nbnD2WvDXAT9cxEWep0f78bv6_hOaP51tmRjmY0oT1k' target='_blank'>Captain Idol's Voyage Analysis Sheet</a>
</>
}
mouseLeaveDelay={1000}
/>
{CIVASExportFailed &&
<Message negative>Export to clipboard failed</Message>
}
</React.Fragment>
}
</div>
)
}
Example #14
Source File: Members2.tsx From Riakuto-StartingReact-ja3.1 with Apache License 2.0 | 5 votes |
Members: VFC<Props> = ({ orgCodeList, prefetch = () => undefined }) => {
const [orgCode, setOrgCode] = useState('');
const [input, setInput] = useState('');
const [isPending, startTransition] = useTransition();
const { reset } = useQueryErrorResetBoundary();
const menuItems = orgCodeList.map((code) => ({
key: code,
name: capitalize(code),
onClick: () => {
setInput('');
if (orgCode) {
startTransition(() => setOrgCode(code));
} else {
setOrgCode(code);
}
},
onMouseOver: () => prefetch(code),
active: code === orgCode,
}));
const handleSubmit = (event: FormEvent<HTMLFormElement>): void => {
event.preventDefault();
setOrgCode(input.toLowerCase().trim());
};
return (
<>
<header className="app-header">
<h1>組織メンバーリスト</h1>
</header>
<form className="search-form" onSubmit={handleSubmit}>
<Input
placeholder="組織コードを入力..."
type="text"
value={input}
onChange={(_, data) => setInput(data.value)}
/>
<Button type="submit" disabled={isPending} primary>
検索
</Button>
</form>
<Menu items={menuItems} text />
<Divider />
<div className={isPending ? 'loading' : ''}>
<ErrorBoundary
fallbackRender={({ resetErrorBoundary }) => (
<>
<Message warning>
{orgCode} というコードの組織は見つかりません
</Message>
<Button color="olive" onClick={() => resetErrorBoundary()}>
エラーをリセット
</Button>
</>
)}
onReset={() => reset()}
>
<SuspenseList revealOrder="forwards">
<Suspense fallback={<Spinner size="small" />}>
<OrgInfo orgCode={orgCode} />
</Suspense>
<Suspense fallback={<Spinner size="large" />}>
<MemberList orgCode={orgCode} />
</Suspense>
</SuspenseList>
</ErrorBoundary>
</div>
</>
);
}
Example #15
Source File: LobbyUserPanel.tsx From FLECT_Amazon_Chime_Meeting with Apache License 2.0 | 5 votes |
render(){
const props = this.props as any
return(
<div>
{this.state.open ?
(
<div>
<Card width="100%">
<Button basic size="tiny" compact onClick={()=>{this.handleClick()}} >
{/* <Header as='h5'> */}
<Icon name="angle up" />Actions
{/* </Header> */}
</Button>
<Card.Content>
<VideoShareControl {...props} />
<DisplayShareControl {...props} />
<StampAccordion {...props} />
<SendTextAccordion {...props}/>
<SecondaryCameraAccordion {...props} />
<StampAccordionBySignal {...props} />
<FileShareControl {...props} />
</Card.Content>
</Card>
</div>
)
:
(
<div>
<Card >
<Button basic size="tiny" compact onClick={()=>{this.handleClick()}} >
{/* <Header as='h5'> */}
<Icon name="angle down" />Actions
{/* </Header> */}
</Button>
</Card>
</div>
)
}
</div>
)
}
Example #16
Source File: behold.tsx From website with MIT License | 5 votes |
render() {
if (this.state.allcrew.length === 0) {
return (
<Layout title='Behold helper / crew comparison'>
<div className='ui medium centered text active inline loader'>Loading data...</div>
</Layout>
);
}
let peopleToShow = [...this.state.peopleList];
if (this.state.minRarity) {
peopleToShow = peopleToShow.filter((crew) => crew.max_rarity >= this.state.minRarity);
}
return (
<Layout title='Behold helper / crew comparison'>
<Header as='h2'>Behold helper / crew comparison</Header>
<Form>
<Form.Group>
<Dropdown
clearable
fluid
multiple
search
selection
closeOnChange
options={peopleToShow}
placeholder='Search for crew to compare'
label='Behold crew'
value={this.state.currentSelectedItems}
onChange={(e, { value }) => this._selectionChanged(value)}
/>
<Form.Field
control={Dropdown}
placeholder={this.state.minRarity ? `Minimum rarity: ${this.state.minRarity}` : `Minimum rarity`}
selection
options={rarityOptions}
value={this.state.minRarity}
onChange={(e, { value }) => this.setState({ minRarity: value })}
/>
</Form.Group>
</Form>
{this.state.currentSelectedItems?.length > 0 && (
<Button compact icon='add user' color='green' content='Preview all in your roster' onClick={() => { this._addProspects(); }} />
)}
<Divider horizontal hidden />
<Grid columns={3} stackable centered padded divided>
{this.state.entries.map((entry, idx) => (
<Grid.Column key={idx}>
<Header as='h5'>
<Link to={`/crew/${entry.crew.symbol}/`}>
{entry.crew.name}{' '}
<Rating defaultRating={entry.crew.max_rarity} maxRating={entry.crew.max_rarity} icon='star' size='small' disabled />
</Link>
</Header>
<CommonCrewData compact={true} crewDemands={entry.crewDemands} crew={entry.crew} markdownRemark={entry.markdownRemark} roster={this.state.roster}/>
{entry.markdown && (
<React.Fragment>
<div dangerouslySetInnerHTML={{ __html: entry.markdown }} />
<div style={{ marginTop: '1em' }}>
<a href={`https://www.bigbook.app/crew/${entry.crew.symbol}`}>View {entry.crew.name} on Big Book</a>
</div>
</React.Fragment>
)}
</Grid.Column>
))}
</Grid>
</Layout>
);
}
Example #17
Source File: HomeButton.tsx From Riakuto-StartingReact-ja3.1 with Apache License 2.0 | 5 votes |
HomeButton: VFC<{ redirectToHome?: () => void }> = ({
redirectToHome = () => undefined,
}) => (
<Button basic color="grey" onClick={redirectToHome}>
<Icon name="home" />
ホームへ
</Button>
)
Example #18
Source File: crewchallenge.tsx From website with MIT License | 5 votes |
PracticeGame = () => {
const portalCrew = React.useContext(PortalCrewContext);
const [rules, setRules] = useStateWithStorage('datalore/practiceRules', newPracticeRules());
const [solution, setSolution] = useStateWithStorage('datalore/practiceSolution', '');
const [guesses, setGuesses] = useStateWithStorage('datalore/practiceGuesses', []);
const [solveState, setSolveState] = useStateWithStorage('datalore/practiceSolveState', SolveState.Unsolved);
if (!solution) {
createPracticeGame();
return (<></>);
}
return (
<React.Fragment>
<p>
You can play as many practice games as you like. Statistics for practice games will not be recorded.
<CustomRules rules={rules} changeRules={changePracticeRules} />
</p>
<CrewChallengeGame rules={rules} solution={solution}
guesses={guesses} setGuesses={setGuesses}
solveState={solveState} setSolveState={setSolveState} />
<div style={{ marginTop: '2em' }}>
{solveState === SolveState.Unsolved && <Button content='Give Up' onClick={() => resignPracticeGame()} />}
{solveState !== SolveState.Unsolved && <Button content='Play Again' onClick={() => createPracticeGame()} />}
</div>
</React.Fragment>
);
function newPracticeRules(): GameRules {
const newRules = new GameRules();
newRules.series = DEFAULT_SERIES;
newRules.rarities = DEFAULT_RARITIES;
return newRules;
}
function changePracticeRules(newRules: GameRules): void {
setRules(newRules);
setSolution('');
}
function createPracticeGame(): void {
let pool = portalCrew.slice();
if (rules.excludedCrew.length > 0)
pool = pool.filter(crew => !rules.excludedCrew.includes(crew.symbol));
const randomIndex = Math.floor(Math.random()*pool.length);
setSolution(pool[randomIndex].symbol);
setGuesses([]);
setSolveState(SolveState.Unsolved);
}
function resignPracticeGame(): void {
setSolveState(SolveState.Loser);
}
}
Example #19
Source File: Timer3.tsx From Riakuto-StartingReact-ja3.1 with Apache License 2.0 | 5 votes |
Timer: VFC<{ limit: number }> = ({ limit }) => {
const [timeLeft, setTimeLeft] = useState(limit);
const primes = useMemo(() => getPrimes(limit), [limit]);
const timerId = useRef<NodeJS.Timeout>();
const tick = () => setTimeLeft((t) => t - 1);
const clearTimer = () => {
if (timerId.current) clearInterval(timerId.current);
};
const reset = useCallback(() => {
clearTimer();
timerId.current = setInterval(tick, 1000);
setTimeLeft(limit);
}, [limit]);
useEffect(() => {
reset();
return clearTimer;
}, [reset]);
useEffect(() => {
if (timeLeft === 0) reset();
}, [timeLeft, reset]);
return (
<Card>
<Statistic className="number-board">
<Statistic.Label>time</Statistic.Label>
<Statistic.Value
className={primes.includes(timeLeft) ? 'prime-number' : undefined}
>
{timeLeft}
</Statistic.Value>
</Statistic>
<Card.Content>
<Button color="red" fluid onClick={reset}>
<Icon name="redo" />
Reset
</Button>
</Card.Content>
</Card>
);
}
Example #20
Source File: LobbyUserPanel.tsx From FLECT_Amazon_Chime_Meeting with Apache License 2.0 | 5 votes |
render(){
const props = this.props as any
return(
<div>
{this.state.open ?
(
<div>
<Card width="100%">
<Button basic size="tiny" compact onClick={()=>{this.handleClick()}} >
{/* <Header as='h5'> */}
<Icon name="angle up" />Configurations
{/* </Header> */}
</Button>
<Card.Content>
<p>
<MicControl {...props} />
</p>
<p>
<VideoControl {...props} />
</p>
<p>
<SpeakerControl {...props} />
</p>
<Divider />
<p>
<VideoResolutionControl {...props} />
</p>
<p>
<SettingControl {...props}/>
</p>
</Card.Content>
</Card>
</div>
)
:
(
<div>
<Card >
<Button basic size="tiny" compact onClick={()=>{this.handleClick()}} >
{/* <Header as='h5'> */}
<Icon name="angle down" />Configurations
{/* </Header> */}
</Button>
</Card>
</div>
)
}
</div>
)
}
Example #21
Source File: FileShareModal.tsx From watchparty with MIT License | 5 votes |
render() {
const { closeModal } = this.props;
return (
<Modal open={true} onClose={closeModal as any}>
<Modal.Header>Share A File</Modal.Header>
<Modal.Content image>
<Modal.Description>
<div>You're about to share a file from your device.</div>
<ul>
<li>This feature is only supported on Chrome and Edge.</li>
<li>
To test whether the file can be shared, you can try opening it
locally with your browser to see if it will play properly.
</li>
<li>
Certain codecs, such as HEVC, AC3, and H265 will not play in
Chrome (they may work in Edge)
</li>
<li>
There is a Chrome issue where the sharer needs to{' '}
<a
target="_blank"
rel="noreferrer"
href="https://www.howtogeek.com/412738/how-to-turn-hardware-acceleration-on-and-off-in-chrome/"
>
disable hardware acceleration
</a>{' '}
in order for others to receive video.
</li>
</ul>
<Button
onClick={() => {
this.props.startFileShare();
this.props.closeModal();
}}
>
Start Fileshare
</Button>
</Modal.Description>
</Modal.Content>
</Modal>
);
}
Example #22
Source File: topmenu.tsx From website with MIT License | 5 votes |
render() {
const { user, password, loginDialogOpen, loggingIn, errorMessage, messageModalOpen } = this.state;
const { narrowLayout, children } = this.props;
const windowGlobal = typeof window !== 'undefined' && window;
let isLoggedIn = windowGlobal && window.localStorage && window.localStorage.getItem('token') && window.localStorage.getItem('username');
const userName = isLoggedIn ? window.localStorage.getItem('username') : '';
return (
<React.Fragment>
<NavBar narrowLayout={narrowLayout} onMessageClicked={() => this.setState({ messageModalOpen: true })}>
{children}
</NavBar>
<Modal open={loginDialogOpen} onClose={() => this._closeLoginDialog()} size='tiny'>
<Modal.Header>Log-in to your account</Modal.Header>
<Modal.Content>
<Grid textAlign='center' verticalAlign='middle'>
<Grid.Column style={{ maxWidth: 450 }}>
<Form size='large' loading={loggingIn}>
<Segment>
<Form.Input
fluid
icon='user'
iconPosition='left'
placeholder='Username'
value={user}
onChange={(e, { value }) => this.setState({ user: value })}
/>
<Form.Input
fluid
icon='lock'
iconPosition='left'
placeholder='Password'
type='password'
value={password}
onChange={(e, { value }) => this.setState({ password: value })}
/>
</Segment>
</Form>
{errorMessage && <Message error>{errorMessage}</Message>}
{!errorMessage && (
<Message>If you are an approved book editor, log in here to submit changes directly from the site.</Message>
)}
</Grid.Column>
</Grid>
</Modal.Content>
<Modal.Actions>
<Button content='Cancel' onClick={() => this._closeLoginDialog()} />
<Button positive content='Login' onClick={() => this._doLogin()} />
</Modal.Actions>
</Modal>
<Modal open={messageModalOpen} closeOnEscape={false} closeOnDimmerClick={false} onClose={() => this._closeMessageDialog()}>
<Modal.Header>The DataCore website and bot are in need of software engineers!</Modal.Header>
<Modal.Content>
<p>
We need your help! The project is <a href='https://github.com/stt-datacore'>open source</a> so we're open for contributions
from software engineers, designers, devops, testers and so on. Reach out on our{' '}
<a href='https://discord.gg/2SY8W7Aeme'>development Discord</a> if you're not sure where to start.
</p>
<p>
If you've always wanted a feature on DataCore, here's your chance to hack on the project and implement it yourself! Most of
the project is written in TypeScript, with node.js on the backend and React with Gatsby on the frontend.
</p>
</Modal.Content>
<Modal.Actions>
<Button icon='checkmark' onClick={() => this._closeMessageDialog()} content='Ok' />
</Modal.Actions>
</Modal>
</React.Fragment>
);
}
Example #23
Source File: LoginModal.tsx From watchparty with MIT License | 5 votes |
render() {
const { closeLogin } = this.props;
return (
<Modal open={true} onClose={closeLogin as any}>
<Modal.Header>
{this.state.isCreateMode ? 'Create an account' : 'Login'}
</Modal.Header>
<Modal.Content>
{this.state.error && (
<Message color="red" header="Error" content={this.state.error} />
)}
<Form>
<Form.Field>
<label>Email</label>
<input
placeholder="Email"
value={this.state.email}
onChange={(e) => this.setState({ email: e.target.value })}
/>
</Form.Field>
<Form.Field>
<label>Password</label>
<input
type="password"
placeholder="Password"
value={this.state.password}
onChange={(e) => this.setState({ password: e.target.value })}
/>
</Form.Field>
{!this.state.isCreateMode && (
<div>
Don't have an account?{' '}
<button
type="button"
className="linkButton"
onClick={() => this.setState({ isCreateMode: true })}
>
Create one.
</button>{' '}
Forgot your password? Enter your email and{' '}
<button
type="button"
className="linkButton"
onClick={this.resetPassword}
>
reset it.
</button>
</div>
)}
{this.state.isCreateMode ? (
<Button
type="submit"
onClick={() =>
this.createAccount(this.state.email, this.state.password)
}
>
Create
</Button>
) : (
<Button
type="submit"
onClick={() =>
this.emailSignIn(this.state.email, this.state.password)
}
>
Login
</Button>
)}
</Form>
</Modal.Content>
</Modal>
);
}
Example #24
Source File: NewContentWidget.tsx From communitymap-ui with Apache License 2.0 | 5 votes |
NewContentWidget: React.FC<{
authenticated: boolean;
onAdd: (item: ObjectItemInput) => Promise<any>;
}> = ({ authenticated, onAdd }) => {
const [addType, setAddType] = useState<ObjectItemInput['type'] | null>(null);
const showLogin = !authenticated && !!addType;
return (
<Segment id="new-content-widget">
{showLogin && <Login onClose={() => setAddType(null)} />}
{authenticated && (
<>
{!!addType && (
<Modal open size="tiny" closeIcon onClose={() => setAddType(null)}>
<Modal.Content>
<AddNewObjectRender
type={addType}
onAdd={(it) =>
onAdd(it)
.then(() => setAddType(null))
.catch(reportError)
}
/>
</Modal.Content>
</Modal>
)}
</>
)}
<h5>I want to post</h5>
{([
'chat',
'request',
'offer',
// 'donation',
] as ObjectItemInput['type'][]).map((type) => (
<Button
key={type}
icon={type2icon(type)}
// basic
primary
content={type2title(type)}
onClick={() => setAddType(type)}
/>
))}
<hr />
<Button
key="place"
icon="building"
primary
content="Place"
onClick={() => setAddType('place')}
/>
<hr />
<Button
key="story"
icon="edit outline"
primary
content="Story"
onClick={() => setAddType('story')}
/>
</Segment>
);
}
Example #25
Source File: App.tsx From js-examples with MIT License | 5 votes |
render () {
return (
<div className="App">
<Segment.Group style={{ height: "100%" }}>
<Segment clearing className="nav">
<Header className="avatar" as="h2" floated="left" title={this.state.identity ? this.state.identity.toString() : 'identity'}>
{this.state.identity && <Avatar identity={this.state.identity.toString()}/>}
</Header>
<Header className="dropzone-container" as="h2" floated="right" title={'add photo'}>
{!this.state.isLoading && this.renderDropzone()}
</Header>
{this.state.url &&
<a href={this.state.url} target="_blank" rel="noopener noreferrer">
<Button
className="link"
floated="right"
>BUCKET</Button>
</a>
}
{this.state.www &&
<a href={this.state.www} target="_blank" rel="noopener noreferrer">
<Button
className="link"
floated="right"
>WWW</Button>
</a>
}
{this.state.ipns &&
<a href={this.state.ipns} target="_blank" rel="noopener noreferrer">
<Button
className="link"
floated="right"
>IPNS</Button>
</a>
}
</Segment>
<Segment className={ this.state.isLoading ? 'rendering' : 'complete'}>
<Photos photos={this.state.photos}/>
</Segment>
</Segment.Group>
</div>
)
}
Example #26
Source File: Story.tsx From communitymap-ui with Apache License 2.0 | 5 votes |
AddNewStoryObject: React.FC<{
type: ObjectItemInput['type'];
onPost: (data: ObjectItemInput) => void;
}> = ({ type, onPost }) => {
const [state, setState] = useState({ valid_until: 12 * 60 } as any);
const onChange = (e: any) => {
const { name, value } = e.target;
console.debug(e.target.name, e.target.value);
setState({ ...state, [name]: value });
};
return (
<div className="add-new-story">
<h4>
<Icon name="edit outline" /> Create story
</h4>
<Form
onSubmit={(e) => {
e.preventDefault();
console.debug('submit', state);
const { topic, message, valid_until } = state;
onPost({
type,
title: topic || message,
description: message,
valid_until: dayjs().add(valid_until, 'minute').toISOString(),
});
}}
>
<Form.Input
autoComplete="off"
label="Subject"
name="topic"
onChange={onChange}
/>
<Form.TextArea
autoFocus
label="Story"
name="message"
onChange={onChange}
/>
<Form.Button primary>Post</Form.Button>
</Form>
</div>
);
}
Example #27
Source File: index.tsx From multi-sig-wallet with MIT License | 5 votes |
function App() {
const {
state: { account, netId },
updateAccount,
} = useWeb3Context();
const { pending, error, call } = useAsync(unlockAccount);
async function onClickConnect() {
const { error, data } = await call(null);
if (error) {
console.error(error);
}
if (data) {
updateAccount(data);
}
}
return (
<div className="App">
<div className="App-main">
<h1>Multi Sig Wallet</h1>
{account ? (
<>
{netId !== 0 && <Network netId={netId} />}
<div>Account: {account}</div>
<MultiSigWallet />
</>
) : (
<>
{error ? (
<Message error>{error.message}</Message>
) : (
<Message warning>Metamask is not connected</Message>
)}
<Button
color="green"
onClick={() => onClickConnect()}
disabled={pending}
loading={pending}
>
Connect to Metamask
</Button>
</>
)}
</div>
<Footer />
</div>
);
}
Example #28
Source File: ProfileWidget.tsx From communitymap-ui with Apache License 2.0 | 5 votes |
ProfileWidget: React.FC = () => {
const user = useAuth();
const [login, setLogin] = useState(false);
useEffect(() => {
if (user && login) {
setLogin(false);
}
}, [user, login]);
const signOut = () => getFirebaseApp().auth().signOut();
return (
<div id="profile-widget">
{login && <Login title="" onClose={() => setLogin(false)} />}
{user ? (
<Dropdown
trigger={
<Button className="profile-button" icon size="large">
<Icon.Group>
<Icon name="user outline" />
</Icon.Group>
</Button>
}
pointing="top right"
icon={null}
>
<Dropdown.Menu>
<Dropdown.Item disabled>{user.email}</Dropdown.Item>
<Dropdown.Divider />
<Dropdown.Item onClick={signOut}>
<Icon name="log out" />
Log out
</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>
) : (
<Button primary size="large" onClick={() => setLogin(true)}>
Sign in
</Button>
)}
</div>
);
}
Example #29
Source File: DepositForm.tsx From multi-sig-wallet with MIT License | 5 votes |
DepositForm: React.FC<Props> = () => {
const {
state: { web3, account },
} = useWeb3Context();
const [input, setInput] = useState("");
const { pending, call } = useAsync<DepositParams, void>(
({ web3, account, value }) => deposit(web3, account, { value })
);
function onChange(e: React.ChangeEvent<HTMLInputElement>) {
setInput(e.target.value);
}
async function onSubmit(_e: React.FormEvent<HTMLFormElement>) {
if (pending) {
return;
}
if (!web3) {
alert("No web3");
return;
}
const value = Web3.utils.toBN(input);
const zero = Web3.utils.toBN(0);
if (value.gt(zero)) {
const { error } = await call({
web3,
account,
value,
});
if (error) {
alert(`Error: ${error.message}`);
} else {
setInput("");
}
}
}
return (
<Form onSubmit={onSubmit}>
<Form.Field>
<Form.Input
placeholder="Amount to deposit wei"
type="number"
min={0}
value={input}
onChange={onChange}
/>
</Form.Field>
<Button color="green" disabled={pending} loading={pending}>
Deposit
</Button>
</Form>
);
}