@jsinfin/server-status
v2.0.2
Published
A reusable React component that allows your users to determine the status of your server; up / on or down / off
Downloads
9
Maintainers
Readme
server-status
A reusable React component that shows you the status of your server; on or off
Installation
server-status
comes under a scoped package @jsinfin
:
npm install --save @jsinfin/server-status
Is @jsinfin/...
a Mono Repo?
Well, yes and no. <ServerStatus />
is one component out of the numerous to come under the scope @jsinfin
. At the core of the build is:
- Lerna
- Storybook
- Usual Suspects
So, yes the entire build process is geared towards the mono-repo style. However, as an author/publisher I decided to release each individual component to the world before releasing the entire collection (where you could sample components via storybook + addons) and build.
Parcel Bundler
I have my reasons, some will agree, others might not. Within this effort I chose to use Parcel for each individual component that I
open-sourced on Github from scoped @jsinfin
packages as a way for consumers to not only get the source, but to also view and
interact with each particular scoped component.
Implications
Instead of storybook documentation initially please read the docs below. Once the final release is out you'll have Storybook to fiddle around with. Of course, this is just for Github - the components are distributed from NPM, and published on NPM.
Installation
git clone server-status
npm install
- You'll need parcel, so
npm install parcel -g
, you can install it globally or add it topackage.json
- Each repo will have an
index.html
. From the command line just run:$ parcel index.html
to view the component.
Prop Types & Defaults
- @height: [number] {default: 10}
- @width: [number] {default: 10}
- @border: [number] {default: 0}
- @borderColor: [string] {default: none}
- @borderStyle: [string] {default: #4c924c}
Usage
<ServerStatus />
is a stateless component, keep that in mind.
It takes in one variable from the outside world that controls the condition to the ternary in the backgroundColor
prop.
This is usually set to false
or off
as default, but it's up to you.
backgroundColor={_*condition*_ ? '#14f1b9' : '#FF0000'}
This variable needs to be created by the consumer, /ie: you. You can then easily toggle that variable or even add it to state on a class level component whilst returning the
<ServerStatus />
component:
import ServerStatus from '@jsinfin/server-status'
// or similar variation in class level component, off by default
let isStatusOn = false
toggleStatus() {
isStatusOn = !isStatusOn
}
<ServerStatus
backgroundColor={
isStatusOn ?
'#14f1b9'
: '#FF0000'
}
/>
If you wanted a more verbose solution you could use get/set from a class and set status where-ever you deemed fit:
class Settings {
constructor() {
this.isStatusOn = false
}
get status() {
return this.isStatusOn
}
setStatusOn() {
return this.isStatusOn = true
}
setStatusOff() {
return this.isStatusOn = false
}
}
export default Settings
...then in your component:
import ServerStatus from '@jsinfin/server-status'
import settings from 'config/settings'
<ServerStatus
backgroundColor={
settings.status ? // gotcha!
'#14f1b9'
: '#FF0000'
}
/>
// of course elsewhere you would have:
import Settings from 'path_to_config_settings'
let settings = new Settings()
server.listen(port, (err) => {
if (err) {
return console.log('something's not quite right, err)
}
settings.setStatusOn()
console.log(`server is listening on ${port}`)
})
}
Basic Usage
import ServerStatus from '@jsinfin/server-status'
import settings from 'config/settings'
// off by default
<ServerStatus
backgroundColor={
settings.status ?
'#14f1b9'
: '#FF0000'
}
/>
// turn on, i explicitly called the method below,
// you would instead call setting.setStatusOn() elsewhere
// or declare your variable / state locally
<ServerStatus
backgroundColor={
settings.setStatusOn() ?
'#14f1b9'
: '#FF0000'
}
/>
Overriding Default Props
import ServerStatus from '@jsinfin/server-status'
import settings from 'config/settings'
// off by default
<ServerStatus
height={12}
width={12}
border={1}
backgroundColor={
settings.status() ?
'#14f1b9'
: '#FF0000'
}
/>