semantic-ui-react#Segment TypeScript Examples
The following examples show how to use
semantic-ui-react#Segment.
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: ErrorPortal.tsx From FLECT_Amazon_Chime_Meeting with Apache License 2.0 | 6 votes |
render() {
const gs = this.props as GlobalState
return (
<Portal onClose={this.handleClose} open={true}>
<Segment
style={{
left: '40%',
position: 'fixed',
top: '50%',
zIndex: 1000,
}}
>
<Header>Error</Header>
<p>
{gs.errorMessage}
</p>
<Button
content='Close Portal'
negative
onClick={this.handleClose}
/>
</Segment>
</Portal>
)
}
Example #2
Source File: PointingSegment.tsx From communitymap-ui with Apache License 2.0 | 6 votes |
PointingSegment: React.FC = ({ children }) => {
return (
<Segment raised className="pointing-segment left pointing label">
{children}
</Segment>
);
// alternative approach
// return <div className="pointing-segment pointing-label-right-side">{children}</div>
}
Example #3
Source File: bb.tsx From website with MIT License | 6 votes |
render() {
return (
<div ref={ref => this.setState({ context: ref })}>
<Rail internal position='left' attached style={{ top: 'auto', height: 'auto', width: '100%' }}>
<Sticky context={this.state.context}>
<Segment inverted>
<a style={{ cursor: 'pointer' }} onClick={() => this._scrollTop()}>
{this.props.title}
</a>
</Segment>
</Sticky>
</Rail>
<div style={{ paddingTop: '4em' }}>{this.props.section.map(e => e.elem)}</div>
</div>
);
}
Example #4
Source File: citeoptimizer.tsx From website with MIT License | 6 votes |
render() {
let { citeData } = this.state;
return (
<>
<Segment>
{!citeData &&
<>
<Icon loading name='spinner' /> Loading citation optimizer ...
</>
}
{citeData &&
<Tab panes={[
{ menuItem: 'Crew To Cite', render: () => this.renderTable(citeData.crewToCite, false) },
{ menuItem: 'Crew To Train', render: () => this.renderTable(citeData.crewToTrain, true) }
]} />
}
<Rail position='right'>
<h3>Explanation</h3>
<p>
A crew's Expected Value (EV) is the average you can expect a crew to contribute to all voyages. EV Final accounts for the crew fully fused. EV Left, while less important, calculates the difference in contribution between fully fused and their current rank. Voyages Improved is how many of the voyage combinations the crew contributes to. Primary and secondary are taken into account, because CMD/DIP voyage will yield different results than DIP/CMD.
</p>
<p>
A crew's EV for a voyage is found by finding the crew's average for the skill "Base + (Min + Max) / 2", multiplying that by 0.35 if the skill is the primary for the voyage, 0.25 if it is secondary, and 0.1 otherwise. To find how much the crew contributes to the total voyage, we find the best crew for the voyage that are fully leveled and equipped.
</p>
<p>
"Training" is considered simply leveling and equipping the considered crew <u>at their current rarity</u>. This is done by comparing the current total EV of all voyages with those as if the considered crew were fully leveled and equiped <u>at current rarity</u>.
</p>
<p>
"Citing" considered <u>fully fusing</u>, leveling and equipping the considered crew. This is done by comparing the current total EV of all voyages with those as if the considered crew were fully leveled and equiped <u>and fused</u>.
</p>
</Rail>
</Segment>
</>
);
}
Example #5
Source File: extracrewdetails.tsx From website with MIT License | 6 votes |
renderVariants() {
if (this.state.variants.length == 0) {
return <span />;
}
return (
this.state.variants.map((group, idx) => (
<Segment key={idx}>
<Header as='h4'>Variants of {group.name}</Header>
<Grid centered padded>
{group.trait_variants.map(variant => (
<Grid.Column key={variant.symbol} textAlign='center' mobile={8} tablet={5} computer={4}>
<ItemDisplay
src={`${process.env.GATSBY_ASSETS_URL}${variant.imageUrlPortrait}`}
size={128}
maxRarity={variant.max_rarity}
rarity={variant.max_rarity}
/>
<div><Link to={`/crew/${variant.symbol}/`}>{variant.name}</Link></div>
</Grid.Column>
))}
</Grid>
</Segment>
))
);
}
Example #6
Source File: extracrewdetails.tsx From website with MIT License | 6 votes |
renderConstellation() {
if (!this.state.constellation) {
return <span />;
}
const { constellation } = this.state;
return (
<Segment>
<Header as='h4'>{constellation.name}</Header>
<div dangerouslySetInnerHTML={{ __html: constellation.flavor }} />
<Grid columns={5} centered padded>
{constellation.keystones.map((kk, idx) => (
<Grid.Column key={idx} textAlign='center'>
<img width={48} src={`${process.env.GATSBY_ASSETS_URL}${kk.icon.file.substr(1).replace(/\//g, '_')}`} />
<br/ >
<Link to={`/?search=trait:${kk.short_name}`}>
<span style={{ fontWeight: 'bolder' }}>
{kk.short_name}
</span>
</Link>
</Grid.Column>
))}
</Grid>
</Segment>
);
}
Example #7
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 #8
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 #9
Source File: Spinner.tsx From Riakuto-StartingReact-ja3.1 with Apache License 2.0 | 5 votes |
Spinner: VFC = () => (
<Segment className="spinner">
<Dimmer active inverted>
<Loader inverted={false}>読み込み中...</Loader>
</Dimmer>
</Segment>
)
Example #10
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 #11
Source File: commoncrewdata.tsx From website with MIT License | 4 votes |
renderOtherRanks(crew, roster = false) {
let v = [];
let g = [];
let b = [];
const skillName = short => CONFIG.SKILLS[CONFIG.SKILLS_SHORT.find(c => c.short === short).name];
const rankHandler = rank => roster
? roster.filter(c => c.ranks[rank] && crew.ranks[rank] > c.ranks[rank]).length + 1
: crew.ranks[rank];
const tripletHandler = rank => roster
? roster.filter(c => c.ranks[rank] &&
c.ranks[rank].name == crew.ranks[rank].name &&
crew.ranks[rank].rank > c.ranks[rank].rank).length + 1
: crew.ranks[rank].rank;
// Need to filter by skills first before sorting by voyage triplet
const tripletFilter = crew.ranks.voyTriplet
? crew.ranks.voyTriplet.name.split('/')
.map(s => 'skill:'+s.trim())
.reduce((prev, curr) => prev+' '+curr)
: '';
for (let rank in crew.ranks) {
if (rank.startsWith('V_')) {
v.push(
<Statistic key={rank}>
<Statistic.Label>{rank.substr(2).replace('_', ' / ')}</Statistic.Label>
<Statistic.Value>{rankLinker(roster, rankHandler(rank), crew.symbol, 'ranks.'+rank)}</Statistic.Value>
</Statistic>
);
} else if (rank.startsWith('G_')) {
g.push(
<Statistic key={rank}>
<Statistic.Label>{rank.substr(2).replace('_', ' / ')}</Statistic.Label>
<Statistic.Value>{rankLinker(roster, rankHandler(rank), crew.symbol, 'ranks.'+rank)}</Statistic.Value>
</Statistic>
);
} else if (rank.startsWith('B_') && crew.ranks[rank]) {
b.push(
<Statistic key={rank}>
<Statistic.Label>{skillName(rank.substr(2))}</Statistic.Label>
<Statistic.Value>{rankLinker(roster, rankHandler(rank), crew.symbol, CONFIG.SKILLS_SHORT.find(c => c.short === rank.substr(2)).name, 'descending')}</Statistic.Value>
</Statistic>
);
}
}
return (
<React.Fragment>
<Segment>
<Header as="h5">Base ranks</Header>
<Statistic.Group widths="three" size={'mini'} style={{ paddingBottom: '0.5em' }}>
{b}
</Statistic.Group>
</Segment>
<Segment>
<Header as="h5">Voyage skill ranks</Header>
{crew.ranks.voyTriplet && (
<React.Fragment>
<Statistic.Group widths="one" size={'mini'}>
<Statistic>
<Statistic.Label>{crew.ranks.voyTriplet.name}</Statistic.Label>
<Statistic.Value>{rankLinker(roster, tripletHandler('voyTriplet'), crew.symbol, 'ranks.voyRank', 'ascending', tripletFilter)}</Statistic.Value>
</Statistic>
</Statistic.Group>
<Divider />
</React.Fragment>
)}
<Statistic.Group widths="three" size={'mini'} style={{ paddingBottom: '0.5em' }}>
{v}
</Statistic.Group>
</Segment>
<Segment>
<Header as="h5">Gauntlet pair ranks</Header>
<Statistic.Group widths="three" size={'mini'} style={{ paddingBottom: '0.5em' }}>
{g}
</Statistic.Group>
</Segment>
</React.Fragment>
);
}
Example #12
Source File: extracrewdetails.tsx From website with MIT License | 4 votes |
renderOptimalPolestars() {
if (!this.state.constellation || !this.state.optimalpolestars) {
return <span />;
}
const { optimalpolestars, constellation, pagination_rows, pagination_page } = this.state;
let data = JSON.parse(JSON.stringify(optimalpolestars));
let crewPolestars = constellation.keystones.concat(constellation.raritystone.concat(constellation.skillstones));
data.forEach((optimal) => {
optimal.combos = optimal.polestars.map((trait) => {
const polestar = crewPolestars.find((op) => filterTraits(op, trait));
// Catch when optimal combos include a polestar that isn't yet in DataCore's keystones list
return polestar ?? {
short_name: trait.substr(0, 1).toUpperCase()+trait.substr(1),
icon: {
file: '/items_keystones_'+trait+'.png'
}
};
})
});
// Pagination
let totalPages = Math.ceil(data.length / this.state.pagination_rows);
data = data.slice(pagination_rows * (pagination_page - 1), pagination_rows * pagination_page);
return (
<Segment>
<Header as='h4'>Optimal Polestars for Crew Retrieval</Header>
<div>All the polestars that give the best chance of retrieving this crew</div>
<Table celled selectable striped collapsing unstackable compact='very'>
<Table.Header>
<Table.Row>
<Table.HeaderCell width={1}>Best Chance</Table.HeaderCell>
<Table.HeaderCell width={3} textAlign='center'>Polestar Combination</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>
{data.map((optimal, idx) => (
<Table.Row key={idx}>
<Table.Cell>
<div style={{ fontWeight: 'bolder', fontSize: '1.25em' }}>
{(1/optimal.count*100).toFixed()}%
</div>
{optimal.count > 1 && (
<div style={{ gridArea: 'description' }}>Shared with{' '}
{optimal.alts.map((alt) => (
<Link key={alt.symbol} to={`/crew/${alt.symbol}/`}>
{alt.name}
</Link>
)).reduce((prev, curr) => [prev, ', ', curr])}
</div>
)}
</Table.Cell>
<Table.Cell>
<Grid columns={4} centered padded>
{optimal.combos.map((polestar, idx) => (
<Grid.Column key={idx} textAlign='center' mobile={8} tablet={5} computer={4}>
<img width={32} src={`${process.env.GATSBY_ASSETS_URL}${polestar.icon.file.substr(1).replace(/\//g, '_')}`} />
<br />{polestar.short_name}
</Grid.Column>
))}
</Grid>
</Table.Cell>
</Table.Row>
))}
</Table.Body>
<Table.Footer>
<Table.Row>
<Table.HeaderCell colSpan="8">
<Pagination
totalPages={totalPages}
activePage={pagination_page}
onPageChange={(event, { activePage }) => this._onChangePage(activePage)}
/>
<span style={{ paddingLeft: '2em' }}>
Rows per page:{' '}
<Dropdown
inline
options={pagingOptions}
value={pagination_rows}
onChange={(event, { value }) =>
this.setState({ pagination_page: 1, pagination_rows: value as number })
}
/>
</span>
</Table.HeaderCell>
</Table.Row>
</Table.Footer>
</Table>
</Segment>
);
}
Example #13
Source File: commoncrewdata.tsx From website with MIT License | 4 votes |
render() {
const { markdownRemark, crew, compact, crewDemands, roster } = this.props;
let panels = [
{
index: 0,
key: 0,
title: getCoolStats(crew, false),
content: { content: <div style={{ paddingBottom: '1em' }}>{this.renderOtherRanks(crew)}</div> }
}
];
if (roster && roster.length > 0) {
panels.push(
{
index: 1,
key: 1,
title: this.rosterComparisonTitle(crew, roster),
content: { content: <div style={{ paddingBottom: '1em' }}>{this.renderOtherRanks(crew, roster)}</div> }
});
}
return (
<React.Fragment>
{compact ? (
<Segment>
<Grid columns={2}>
<Grid.Column width={4}>
<Image src={`${process.env.GATSBY_ASSETS_URL}${crew.imageUrlFullBody}`} size="tiny" />
</Grid.Column>
<Grid.Column width={12}>
<CrewStat
skill_name="security_skill"
data={crew.base_skills.security_skill}
scale={compact ? 0.75 : 1}
/>
<CrewStat skill_name="command_skill" data={crew.base_skills.command_skill} scale={compact ? 0.75 : 1} />
<CrewStat
skill_name="diplomacy_skill"
data={crew.base_skills.diplomacy_skill}
scale={compact ? 0.75 : 1}
/>
<CrewStat skill_name="science_skill" data={crew.base_skills.science_skill} scale={compact ? 0.75 : 1} />
<CrewStat
skill_name="medicine_skill"
data={crew.base_skills.medicine_skill}
scale={compact ? 0.75 : 1}
/>
<CrewStat
skill_name="engineering_skill"
data={crew.base_skills.engineering_skill}
scale={compact ? 0.75 : 1}
/>
</Grid.Column>
</Grid>
</Segment>
) : (
<Segment>
<CrewStat skill_name="security_skill" data={crew.base_skills.security_skill} scale={compact ? 0.75 : 1} />
<CrewStat skill_name="command_skill" data={crew.base_skills.command_skill} scale={compact ? 0.75 : 1} />
<CrewStat skill_name="diplomacy_skill" data={crew.base_skills.diplomacy_skill} scale={compact ? 0.75 : 1} />
<CrewStat skill_name="science_skill" data={crew.base_skills.science_skill} scale={compact ? 0.75 : 1} />
<CrewStat skill_name="medicine_skill" data={crew.base_skills.medicine_skill} scale={compact ? 0.75 : 1} />
<CrewStat
skill_name="engineering_skill"
data={crew.base_skills.engineering_skill}
scale={compact ? 0.75 : 1}
/>
</Segment>
)}
{crew.skill_data && crew.skill_data.length > 0 && (
<Accordion
defaultActiveIndex={-1}
panels={[
{
index: 0,
key: 0,
title: 'Other fuse levels',
content: {
content: (
<Segment.Group raised>
{crew.skill_data.map((sk: any, idx: number) => (
<Segment key={idx}>
<Rating
defaultRating={sk.rarity}
maxRating={crew.max_rarity}
icon="star"
size="small"
disabled
/>
<CrewStat skill_name="security_skill" data={sk.base_skills.security_skill} scale={0.75} />
<CrewStat skill_name="command_skill" data={sk.base_skills.command_skill} scale={0.75} />
<CrewStat skill_name="diplomacy_skill" data={sk.base_skills.diplomacy_skill} scale={0.75} />
<CrewStat skill_name="science_skill" data={sk.base_skills.science_skill} scale={0.75} />
<CrewStat skill_name="medicine_skill" data={sk.base_skills.medicine_skill} scale={0.75} />
<CrewStat
skill_name="engineering_skill"
data={sk.base_skills.engineering_skill}
scale={0.75}
/>
</Segment>
))}
</Segment.Group>
)
}
}
]}
/>
)}
{crew.flavor && !compact && <p>{crew.flavor}</p>}
{compact && (
<div style={{ textAlign: 'center' }}>
<StatLabel title="Voyage rank" value={crew.ranks.voyRank} />
<StatLabel title="Gauntlet rank" value={crew.ranks.gauntletRank} />
<StatLabel title="Big book tier" value={formatTierLabel(markdownRemark.frontmatter.bigbook_tier)} />
{markdownRemark.frontmatter.events !== null && (
<StatLabel title="Events" value={markdownRemark.frontmatter.events} />
)}
</div>
)}
{!compact && (
<>
<Statistic.Group size="tiny">
{markdownRemark.frontmatter.events !== null && (
<Statistic>
<Statistic.Label>Events</Statistic.Label>
<Statistic.Value>{markdownRemark.frontmatter.events}</Statistic.Value>
</Statistic>
)}
<Statistic>
<Statistic.Label>Big Book Tier</Statistic.Label>
<Statistic.Value>{formatTierLabel(markdownRemark.frontmatter.bigbook_tier)}</Statistic.Value>
</Statistic>
<Statistic>
<Statistic.Label>CAB Rating <CABExplanation /></Statistic.Label>
<Statistic.Value>{crew.cab_ov ?? 'None'}</Statistic.Value>
</Statistic>
{!compact && markdownRemark.frontmatter.in_portal !== null && (
<Statistic color={markdownRemark.frontmatter.in_portal ? 'green' : 'red'}>
<Statistic.Label>Portal</Statistic.Label>
<Statistic.Value>{markdownRemark.frontmatter.in_portal ? 'YES' : 'NO'}</Statistic.Value>
</Statistic>
)}
</Statistic.Group>
<Statistic.Group style={{ paddingBottom: '2em' }} size="tiny">
<Statistic>
<Statistic.Label>CAB Rank <CABExplanation /></Statistic.Label>
<Statistic.Value>{crew.cab_ov_rank ? rankLinker(false, crew.cab_ov_rank, crew.symbol, 'cab_ov', 'descending', 'rarity:'+crew.max_rarity) : 'None'}</Statistic.Value>
</Statistic>
<Statistic>
<Statistic.Label>Voyage Rank</Statistic.Label>
<Statistic.Value>{rankLinker(false, crew.ranks.voyRank, crew.symbol, 'ranks.voyRank')}</Statistic.Value>
</Statistic>
<Statistic>
<Statistic.Label>Gauntlet Rank</Statistic.Label>
<Statistic.Value>{rankLinker(false, crew.ranks.gauntletRank, crew.symbol, 'ranks.gauntletRank')}</Statistic.Value>
</Statistic>
</Statistic.Group>
</>
)}
{crewDemands && (
<p>
<b>{crewDemands.factionOnlyTotal}</b>
{' faction items, '}
<span style={{ display: 'inline-block' }}>
<img src={`${process.env.GATSBY_ASSETS_URL}atlas/energy_icon.png`} height={14} />
</span>{' '}
<b>{crewDemands.totalChronCost}</b>
{', '}
<span style={{ display: 'inline-block' }}>
<img src={`${process.env.GATSBY_ASSETS_URL}currency_sc_currency_0.png`} height={16} />
</span>{' '}
<b>{crewDemands.craftCost}</b>
</p>
)}
<Accordion
exclusive={false}
panels={panels}
/>
<p>
<b>Traits: </b>
{crew.traits_named
.map(trait => (
<a key={trait} href={`/?search=trait:${trait}`}>
{trait}
</a>
))
.reduce((prev, curr) => [prev, ', ', curr])}
{', '}
{crew.traits_hidden
.map(trait => (
<a style={{ color: 'lightgray' }} key={trait} href={`/?search=trait:${trait}`}>
{trait}
</a>
))
.reduce((prev, curr) => [prev, ', ', curr])}
</p>
{crew.cross_fuse_targets && crew.cross_fuse_targets.symbol && (
<p>
Can cross-fuse with{' '}
<Link to={`/crew/${crew.cross_fuse_targets.symbol}/`}>{crew.cross_fuse_targets.name}</Link>.
</p>
)}
{crew.collections.length > 0 && (
<p>
<b>Collections: </b>
{crew.collections
.map(col => (
<Link key={col} to={`/collections/#${encodeURIComponent(col)}`}>
{col}
</Link>
))
.reduce((prev, curr) => [prev, ', ', curr])}
</p>
)}
<p>
<b>Date added: </b>{new Date(crew.date_added).toLocaleDateString("en-US")} (<b>Obtained: </b>{crew.obtained})
</p>
{crew.nicknames && crew.nicknames.length > 0 && (
<p>
<b>Also known as: </b>
{crew.nicknames
.map((nick, idx) => (
<span key={idx}>{nick.cleverThing}{nick.creator ? <> (coined by <i>{nick.creator}</i>)</> : ''}</span>
))
.reduce((prev, curr) => [prev, ', ', curr])}
</p>
)}
</React.Fragment>
);
}
Example #14
Source File: profile_crew2.tsx From website with MIT License | 4 votes |
render() {
const { includeFrozen, excludeFF, onlyEvent, activeItem, searchFilter } = this.state;
let { data, itemsReady } = this.state;
const { isMobile } = this.props;
if (!includeFrozen) {
data = data.filter(crew => crew.immortal === 0);
}
if (excludeFF) {
data = data.filter(crew => crew.rarity < crew.max_rarity);
}
if (searchFilter) {
data = data.filter(
crew =>
crew.name.toLowerCase().indexOf(searchFilter) !== -1 ||
crew.traits_named.some(t => t.toLowerCase().indexOf(searchFilter) !== -1) ||
crew.traits_hidden.some(t => t.toLowerCase().indexOf(searchFilter) !== -1)
);
}
const zoomFactor = isMobile ? 0.65 : 0.85;
let opts = [];
if (activeItem === '' || activeItem === this.state.defaultColumn) {
opts = ['Default Sort', 'Crew Level', 'Crew Rarity', 'Alphabetical'];
} else {
opts = ['Base Skill', 'Proficiency Skill', 'Combined Skill'];
}
let settings = ['Include Frozen', 'Exclude FF'];
let eventCrew = bonusCrewForCurrentEvent(this.props.playerData.player.character);
if (eventCrew) {
console.log(eventCrew);
settings.push(`Only event bonus (${eventCrew.eventName})`);
if (onlyEvent) {
data = data.filter(crew => eventCrew.eventCrew[crew.symbol]);
}
}
return (
<div>
<Menu attached={isMobile ? false : 'top'} fixed={isMobile ? 'top' : undefined}>
<Menu.Item
name="command_skill"
active={activeItem === 'command_skill'}
onClick={(e, { name }) => this._handleSortNew({activeItem: name})}
>
<img src={`${process.env.GATSBY_ASSETS_URL}atlas/icon_command_skill.png`} />
</Menu.Item>
<Menu.Item
name="diplomacy_skill"
active={activeItem === 'diplomacy_skill'}
onClick={(e, { name }) => this._handleSortNew({activeItem: name})}
>
<img src={`${process.env.GATSBY_ASSETS_URL}atlas/icon_diplomacy_skill.png`} />
</Menu.Item>
<Menu.Item
name="engineering_skill"
active={activeItem === 'engineering_skill'}
onClick={(e, { name }) => this._handleSortNew({activeItem: name})}
>
<img src={`${process.env.GATSBY_ASSETS_URL}atlas/icon_engineering_skill.png`} />
</Menu.Item>
<Menu.Item
name="security_skill"
active={activeItem === 'security_skill'}
onClick={(e, { name }) => this._handleSortNew({activeItem: name})}
>
<img src={`${process.env.GATSBY_ASSETS_URL}atlas/icon_security_skill.png`} />
</Menu.Item>
<Menu.Item
name="medicine_skill"
active={activeItem === 'medicine_skill'}
onClick={(e, { name }) => this._handleSortNew({activeItem: name})}
>
<img src={`${process.env.GATSBY_ASSETS_URL}atlas/icon_medicine_skill.png`} />
</Menu.Item>
<Menu.Item
name="science_skill"
active={activeItem === 'science_skill'}
onClick={(e, { name }) => this._handleSortNew({activeItem: name})}
>
<img src={`${process.env.GATSBY_ASSETS_URL}atlas/icon_science_skill.png`} />
</Menu.Item>
<DropdownOpts
opts={opts}
settings={settings}
onChange={text => this._onChange(text)}
onSettingChange={(text, val) => this._onSettingChange(text, val)}
/>
<Menu.Menu position="right">
<Menu.Item>
<Input
icon="search"
placeholder="Search..."
value={this.state.searchFilter}
onChange={(e, { value }) => this._onChangeFilter(value)}
/>
</Menu.Item>
</Menu.Menu>
</Menu>
<Segment
attached={isMobile ? false : 'bottom'}
style={isMobile ? { paddingTop: '6em', paddingBottom: '2em' } : {}}
>
<div
style={{
display: 'grid',
gridTemplateColumns: `repeat(auto-fit, minmax(${(zoomFactor * 22).toFixed(2)}em, 1fr))`,
gap: '1em'
}}
>
{data.map((crew, idx) => (
<VaultCrew key={idx} crew={crew} size={zoomFactor} itemsReady={itemsReady} />
))}
</div>
</Segment>
</div>
);
}
Example #15
Source File: voyagestats.tsx From website with MIT License | 4 votes |
/* Not yet in use
_renderReminder() {
return (
<div>
<p>Remind me :-</p>
<Form.Field
control={Checkbox}
label={<label>At the next dilemma.</label>}
checked={this.state.dilemmaAlarm}
onChange={(e, { checked }) => this.setState({ dilemmaAlarm: checked}) }
/>
<Form.Field
control={Checkbox}
label={<label>When the probably of voyage still running reaches {oddsControl}.</label>}
checked={this.state.failureAlarm}
onChange={(e, {checked}) => this.setState({failureAlarm : checked}) }
/>
</div>
);
}
*/
render() {
const { voyageData } = this.props;
if (!voyageData)
return (<Dimmer active>
<Loader>Calculating...</Loader>
</Dimmer>);
const { activePanels } = this.state;
const voyState = voyageData.state;
const rewards = {
'pending': () => [],
'started': () => voyageData.pending_rewards.loot,
'failed': () => voyageData.pending_rewards.loot,
'recalled': () => voyageData.pending_rewards.loot,
'completed': () => voyageData.granted_rewards.loot
}[voyState]();
// Adds/Removes panels from the active list
const flipItem = (items, item) => items.includes(item)
? items.filter(i => i != item)
: items.concat(item);
const handleClick = (e, {index}) =>
this.setState({
activePanels: flipItem(activePanels, index)
});
const accordionPanel = (title, content, key, ctitle = false) => {
const collapsedTitle = ctitle ? ctitle : title;
const isActive = activePanels.includes(key);
return (
<Accordion.Panel
active={isActive}
index={key}
onTitleClick={handleClick}
title={isActive ? {icon: 'caret down', content: title} : {icon: 'caret right', content: collapsedTitle}}
content={{content: <Segment>{content}</Segment>}}/>
);
};
if (voyState !== 'pending') {
return (
<div>
{Math.floor(voyageData.log_index/360) < Math.floor(voyageData.voyage_duration/7200) &&
<Message warning>
WARNING!!! A potential problem with the reported voyage duration has been detected.
The estimate is likely to be inaccurate.
Load the game then return to Datacore with a fresh copy of your player file to get an accurate estimate.
</Message>
}
<Message>Your voyage {voyState === 'failed' ? 'failed at ' : 'has been running for ' + this._formatTime(voyageData.voyage_duration/3600)}.</Message>
<Accordion fluid exclusive={false}>
{
voyState !== 'recalled' && voyState !== 'completed' &&
accordionPanel('Voyage estimate', this._renderEstimate(voyState === 'failed'), 'estimate', this._renderEstimateTitle())
}
{ accordionPanel('Voyage lineup', this._renderCrew(), 'crew') }
{
accordionPanel('Rewards', this._renderRewards(rewards), 'rewards', this._renderRewardsTitle(rewards))
}
</Accordion>
</div>
);
} else {
return (
<div>
<Accordion fluid exclusive={false}>
{ accordionPanel('Voyage estimate', this._renderEstimate(false), 'estimate', this._renderEstimateTitle()) }
{ accordionPanel('Voyage lineup', this._renderCrew(), 'crew') }
</Accordion>
</div>
);
}
}
Example #16
Source File: events.tsx From website with MIT License | 4 votes |
function EventsPage() {
const [eventsData, setEventsData] = React.useState<EventInstance[]>([]);
const [leaderboardData, setLeaderboardData] = React.useState(null);
const [loadingError, setLoadingError] = React.useState(null);
const [modalEventInstance, setModalEventInstance] = React.useState(null);
// load the events and leaderboard data once on component mount
React.useEffect(() => {
async function loadData() {
try {
const fetchEventResp = await fetch('/structured/event_instances.json')
const eventDataList = await fetchEventResp.json();
setEventsData(eventDataList.reverse());
const fetchLeaderboardResp = await fetch('/structured/event_leaderboards.json');
const leaderboardDataList = await fetchLeaderboardResp.json();
const keyedLeaderboard = {};
leaderboardDataList.forEach(entry => keyedLeaderboard[entry.instance_id] = entry);
setLeaderboardData(keyedLeaderboard);
}
catch (e) {
setLoadingError(e);
}
}
loadData();
}, []);
return (
<Layout>
<Container style={{ paddingTop: '4em', paddingBottom: '2em' }}>
<Header as='h2'>Events</Header>
{loadingError && (
<Message negative>
<Message.Header>Unable to load event information</Message.Header>
<pre>{loadingError.toString()}</pre>
</Message>
)}
<Grid stackable columns={3}>
{eventsData.map(eventInfo => (
<Grid.Column key={eventInfo.instance_id}>
<div
style={{ cursor: 'pointer' }}
onClick={() => setModalEventInstance(eventInfo)}
>
<Segment padded>
<Label attached="bottom">
{eventInfo.event_name}
</Label>
<LazyImage
src={`${process.env.GATSBY_ASSETS_URL}${eventInfo.image}`}
size="large"
onError={e => e.target.style.visibility = 'hidden'}
/>
</Segment>
</div>
</Grid.Column>
))}
</Grid>
{modalEventInstance !== null && (
<Modal
open
size="large"
onClose={() => setModalEventInstance(null)}
closeIcon
>
<Modal.Header>{modalEventInstance.event_name}</Modal.Header>
<Modal.Content scrolling>
<EventInfoModal
instanceId={modalEventInstance.instance_id}
image={modalEventInstance.image}
hasDetails={modalEventInstance.event_details}
leaderboard={leaderboardData[modalEventInstance.instance_id].leaderboard}
/>
</Modal.Content>
</Modal>
)}
</Container>
</Layout>
);
}
Example #17
Source File: crewpage.tsx From website with MIT License | 4 votes |
render() {
const { location } = this.props;
const { markdownRemark, crewJson, site: { siteMetadata } } = this.props.data;
if (crewJson.edges.length === 0) {
return <span>Crew not found!</span>;
}
const { comments } = this.state;
let hasBigBookEntry = markdownRemark && markdownRemark.frontmatter && markdownRemark.frontmatter.published;
const userName = this._getCurrentUsername();
const crew = crewJson.edges[0].node;
return (
<Layout narrowLayout={true}>
<Helmet titleTemplate={siteMetadata.titleTemplate} defaultTitle={siteMetadata.defaultTitle}>
<title>{crew.name}</title>
<meta property='og:type' content='website' />
<meta property='og:title' content={`${crew.name} - ${siteMetadata.defaultTitle}`} />
<meta property='og:site_name' content='DataCore' />
<meta property='og:image' content={`${process.env.GATSBY_ASSETS_URL}${crew.imageUrlPortrait}`} />
<meta property='og:description' content={markdownRemark.rawMarkdownBody.trim() || siteMetadata.defaultDescription} />
<meta property='og:url' content={`${siteMetadata.baseUrl}${location.pathname}`} />
</Helmet>
<CrewFullEquipTree
visible={this.state.modalVisible}
items={this.state.items}
crew={crew}
onClosed={() => this.setState({ modalVisible: false })}
/>
<Grid columns={2}>
<Grid.Row stretched>
<Grid.Column width={16}>
<Header>
{crew.name} <Rating defaultRating={crew.max_rarity} maxRating={crew.max_rarity} icon='star' size='large' disabled />
</Header>
</Grid.Column>
</Grid.Row>
<Grid.Row>
<Grid.Column width={4}>
{crew.series && <Image src={`/media/series/${crew.series}.png`} size='small' />}
<Image src={`${process.env.GATSBY_ASSETS_URL}${crew.imageUrlFullBody}`} size='small' />
</Grid.Column>
<Grid.Column width={12}>
<CommonCrewData crew={crew} markdownRemark={markdownRemark} />
<div style={{ margin: '1em 0', textAlign: 'right' }}>
<Button icon='add user' color='green' content='Preview in your roster' onClick={() => { this._addProspect(crew); }} />
</div>
{this.state.items.length > 0 ? (
<React.Fragment>
{this.renderEquipment(crew)}
{this.renderEquipmentDetails(crew)}
<Button
onClick={() => this.setState({ modalVisible: true })}
style={{ marginTop: '1em' }}
content='Full equipment tree'
icon='right arrow'
labelPosition='right'
/>
</React.Fragment>
) : (
<div className='ui medium centered text active inline loader'>Loading items...</div>
)}
<Segment>
<Header as='h4'>{crew.action.name}</Header>
<p>
Boosts {CONFIG.CREW_SHIP_BATTLE_BONUS_TYPE[crew.action.bonus_type]} by {crew.action.bonus_amount}
</p>
<p>
Initialize: {crew.action.initial_cooldown}s, Cooldown: {crew.action.cooldown}s, Duration: {crew.action.duration}s
</p>
{crew.action.limit && <p>Uses Per Battle: {crew.action.limit}</p>}
{crew.action.ability && (
<p>
Bonus ability:
{CONFIG.CREW_SHIP_BATTLE_ABILITY_TYPE[crew.action.ability.type].replace('%VAL%', crew.action.ability.amount)}{' '}
{crew.action.ability.condition > 0 && (
<span>Trigger: {CONFIG.CREW_SHIP_BATTLE_TRIGGER[crew.action.ability.condition]}</span>
)}
</p>
)}
<p>
<b>Accuracy:</b> +{crew.ship_battle.accuracy} <b>Crit Bonus:</b> +{crew.ship_battle.crit_bonus}{' '}
{crew.ship_battle.crit_chance && (
<span>
<b>Crit Rating:</b> +{crew.ship_battle.crit_chance}{' '}
</span>
)}
<b>Evasion:</b> +{crew.ship_battle.evasion}
</p>
{crew.action.penalty && (
<p>
Decrease {CONFIG.CREW_SHIP_BATTLE_BONUS_TYPE[crew.action.penalty.type]} by {crew.action.penalty.amount}
</p>
)}
{this.renderChargePhases(crew.action, crew.action.charge_phases)}
</Segment>
</Grid.Column>
</Grid.Row>
</Grid>
<Divider horizontal hidden />
{hasBigBookEntry && (
<React.Fragment>
<div dangerouslySetInnerHTML={{ __html: markdownRemark.html }} />
<div style={{ marginTop: '1em', textAlign: 'right' }}>
-- <a href={`https://www.bigbook.app/crew/${crew.symbol}`}>The Big Book of Behold Advice</a>
</div>
</React.Fragment>
)}
{/*userName && (
<div>
<br />
<p>Hello, {userName}. You can edit your comment below:</p>
<SimpleMDE
value={this.state.commentMarkdown}
onChange={value => this._handleMarkDownChange(value)}
options={{ hideIcons: ['fullscreen', 'guide', 'image', 'side-by-side'] }}
/>
<Button onClick={() => this._saveComment(crew.symbol, window.localStorage.getItem('token'))} content='Save comment' />
</div>
)}
{comments && (
<Comment.Group>
<Header as='h3' dividing>
Comments
</Header>
{comments.map(comment => (
<Comment key={comment.id}>
<Comment.Avatar src={comment.user.avatar || `${process.env.GATSBY_ASSETS_URL}crew_portraits_cm_empty_sm.png`} />
<Comment.Content>
<Comment.Author>{comment.user.loginUserName}</Comment.Author>
<Comment.Metadata>
<div>{comment.lastUpdate}</div>
</Comment.Metadata>
<Comment.Text>
<div dangerouslySetInnerHTML={{ __html: marked(comment.markdown) }} />
</Comment.Text>
</Comment.Content>
</Comment>
))}
</Comment.Group>
)*/}
<Divider horizontal hidden style={{ marginTop: '4em' }} />
<ExtraCrewDetails
crew_archetype_id={crew.archetype_id}
max_rarity={crew.max_rarity}
base_skills={crew.base_skills}
traits={crew.traits} traits_hidden={crew.traits_hidden}
unique_polestar_combos={crew.unique_polestar_combos}
/>
</Layout>
);
}
Example #18
Source File: LobbyRoomList.tsx From FLECT_Amazon_Chime_Meeting with Apache License 2.0 | 4 votes |
render() {
const gs = this.props as GlobalState
const props = this.props as any
const appState = props.appState as AppState
const joinedMeetingIds = Object.keys(appState.joinedMeetings)
const meetings = gs.meetings.map((meeting:MeetingInfo)=>{
let joinButton
const currentMeetingId = meeting.meetingId
if(joinedMeetingIds.includes(currentMeetingId)){
joinButton = (
<Button basic color="red" floated='right'
onClick={()=>{
console.log("CLICK LEAVE", meeting.meetingId)
props._leaveMeeting(meeting.meetingId, appState.joinedMeetings[currentMeetingId].meetingSession.configuration.credentials!.attendeeId)
}}
>
leave
<Icon name='chevron left' />
</Button>
)
}else{
joinButton = (
<Button basic color="teal" floated='right'
onClick={()=>{
console.log("CLICK JOIN", meeting.meetingId)
props._joinMeeting(meeting.meetingId, gs)
}}>
join
<Icon name='chevron right' />
</Button>
)
}
return (
<Item>
{/* <Item.Image size='mini' src='/' /> */}
<Item.Content>
<Item.Header>
<Icon name="lock open" />
{meeting.meetingName}
</Item.Header>
<Item.Meta>
<div>
<b>Owner: </b>
{meeting.metaData.UserName}
</div>
<div>
<b>Open Date: </b>
<span>{new Date(Number(meeting.metaData.StartTime)).toLocaleDateString()}</span>
<span>{new Date(Number(meeting.metaData.StartTime)).toLocaleTimeString()}</span>
</div>
</Item.Meta>
<Item.Extra>
{joinButton}
</Item.Extra>
</Item.Content>
</Item>
)
})
return (
<div>
<div>
<Modal dimmer={'blurring'} size={'small'} open={this.state.open} onClose={this.close}>
<Modal.Header>Create New Meeting</Modal.Header>
<Modal.Content>
<Form>
<Form.Field>
<label>Room Name</label>
<input placeholder='name' ref={this.roomNameRef}/>
</Form.Field>
<Form.Field>
<Checkbox label='Use Passcode?(not implement)' checked={this.state.usePasscodeChecked}
onClick={()=>{this.setState({ usePasscodeChecked: !this.state.usePasscodeChecked })}}
/>
<label>Pass Code(not implement)</label>
<input placeholder='pass' ref={this.roomPassCodeRef}/>
</Form.Field>
<Form.Field>
<Checkbox label='Secret?(not implement)' checked={this.state.secretRoomCreateChecked}
onClick={()=>{this.setState({ secretRoomCreateChecked: !this.state.secretRoomCreateChecked })}}
/>
</Form.Field>
</Form>
</Modal.Content>
<Modal.Actions>
<Button negative onClick={this.close}>Cancel</Button>
<Button positive icon='checkmark' labelPosition='right' content='Create' onClick={this.createMeeting}/>
</Modal.Actions>
</Modal>
</div>
<div>
<Segment padded>
<Divider horizontal>
<Header as='h2' textAlign="left">
Lobby
</Header>
</Divider>
<Header as='h3' textAlign="left">
Actions
</Header>
<List link>
<List.Item as='a' active onClick={(e, d)=>{this.show()}}>
<Header as='h5' textAlign={'left'}>
<Icon name="chat" active />New Meeting!
</Header>
</List.Item>
<List.Item as='a' active onClick={()=>{props.refreshRoomList()}}>
<Header as='h5' textAlign={'left'}>
<Icon name="refresh" active />Refresh Meeting List
</Header>
</List.Item>
</List>
<Divider hidden />
<Header as='h3' textAlign="left">
Meetings
</Header>
<div>
<Item.Group >
{meetings}
</Item.Group>
</div>
</Segment>
</div>
</div>
)
}