Skip to content

Commit

Permalink
feat: show network status in examples
Browse files Browse the repository at this point in the history
  • Loading branch information
lars-berger committed Sep 11, 2024
1 parent 434a536 commit 5b411e2
Show file tree
Hide file tree
Showing 4 changed files with 160 additions and 28 deletions.
1 change: 1 addition & 0 deletions examples/starter/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ body,
.logo,
.binding-mode,
.tiling-direction,
.network,
.memory,
.cpu,
.battery {
Expand Down
75 changes: 60 additions & 15 deletions examples/starter/vanilla.html
Original file line number Diff line number Diff line change
Expand Up @@ -28,21 +28,24 @@

const zebarCtx = await init();

const [cpu, date, battery, memory, weather] = await Promise.all([
zebarCtx.createProvider({ type: 'cpu' }),
zebarCtx.createProvider({
type: 'date',
formatting: 'EEE d MMM t',
}),
zebarCtx.createProvider({ type: 'battery' }),
zebarCtx.createProvider({ type: 'memory' }),
zebarCtx.createProvider({ type: 'weather' }),
]);
const [network, cpu, date, battery, memory, weather] =
await Promise.all([
zebarCtx.createProvider({ type: 'network' }),
zebarCtx.createProvider({ type: 'cpu' }),
zebarCtx.createProvider({
type: 'date',
formatting: 'EEE d MMM t',
}),
zebarCtx.createProvider({ type: 'battery' }),
zebarCtx.createProvider({ type: 'memory' }),
zebarCtx.createProvider({ type: 'weather' }),
]);

createRoot(document.getElementById('root')).render(<App />);

function App() {
const [outputs, setOutputs] = useState({
network: network.output,
cpu: cpu.output,
date: date.output,
battery: battery.output,
Expand All @@ -51,6 +54,9 @@
});

useEffect(() => {
network.onOutput(network =>
setOutputs(outputs => ({ ...outputs, network })),
);
cpu.onOutput(cpu =>
setOutputs(outputs => ({ ...outputs, cpu })),
);
Expand All @@ -68,6 +74,36 @@
);
}, []);

// Get icon to show for current network status.
function getNetworkIcon() {
switch (outputs.network.defaultInterface?.type) {
case 'ethernet':
return <i className="nf nf-md-ethernet_cable"></i>;
case 'wifi':
if (outputs.network.defaultGateway?.signalStrength >= 80) {
return <i className="nf nf-md-wifi_strength_4"></i>;
} else if (
outputs.network.defaultGateway?.signalStrength >= 65
) {
return <i className="nf nf-md-wifi_strength_3"></i>;
} else if (
outputs.network.defaultGateway?.signalStrength >= 40
) {
return <i className="nf nf-md-wifi_strength_2"></i>;
} else if (
outputs.network.defaultGateway?.signalStrength >= 25
) {
return <i className="nf nf-md-wifi_strength_1"></i>;
} else {
return <i className="nf nf-md-wifi_strength_outline"></i>;
}
default:
return (
<i className="nf nf-md-wifi_strength_off_outline"></i>
);
}
}

// Get icon to show for how much of the battery is charged.
function getBatteryIcon() {
if (outputs.battery.chargePercent > 90)
Expand All @@ -81,7 +117,7 @@
return <i className="nf nf-fa-battery_0"></i>;
}

// Get icon to show for how much of the battery is charged.
// Get icon to show for current weather status.
function getWeatherIcon() {
switch (outputs.weather.status) {
case 'clear_day':
Expand Down Expand Up @@ -120,6 +156,13 @@
<div className="center">{outputs.date.formatted}</div>

<div className="right">
{outputs.network && (
<div className="network">
{getNetworkIcon()}
{outputs.network.defaultGateway?.ssid}
</div>
)}

<div className="memory">
<i className="nf nf-fae-chip"></i>
{Math.round(outputs.memory.usage)}%
Expand Down Expand Up @@ -147,10 +190,12 @@
</div>
)}

<div className="weather">
{getWeatherIcon()}
{Math.round(outputs.weather.celsiusTemp)}°C
</div>
{outputs.weather && (
<div className="weather">
{getWeatherIcon()}
{Math.round(outputs.weather.celsiusTemp)}°C
</div>
)}
</div>
</div>
);
Expand Down
56 changes: 50 additions & 6 deletions examples/starter/with-glazewm.html
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@

const zebarCtx = await init();

const [glazewm, cpu, date, battery, memory, weather] =
const [network, glazewm, cpu, date, battery, memory, weather] =
await Promise.all([
zebarCtx.createProvider({ type: 'network' }),
zebarCtx.createProvider({ type: 'glazewm' }),
zebarCtx.createProvider({ type: 'cpu' }),
zebarCtx.createProvider({
Expand All @@ -45,6 +46,7 @@

function App() {
const [outputs, setOutputs] = useState({
network: network.output,
glazewm: glazewm.output,
cpu: cpu.output,
date: date.output,
Expand All @@ -54,6 +56,9 @@
});

useEffect(() => {
network.onOutput(network =>
setOutputs(outputs => ({ ...outputs, network })),
);
glazewm.onOutput(glazewm =>
setOutputs(outputs => ({ ...outputs, glazewm })),
);
Expand All @@ -71,6 +76,36 @@
);
}, []);

// Get icon to show for current network status.
function getNetworkIcon() {
switch (outputs.network.defaultInterface?.type) {
case 'ethernet':
return <i className="nf nf-md-ethernet_cable"></i>;
case 'wifi':
if (outputs.network.defaultGateway?.signalStrength >= 80) {
return <i className="nf nf-md-wifi_strength_4"></i>;
} else if (
outputs.network.defaultGateway?.signalStrength >= 65
) {
return <i className="nf nf-md-wifi_strength_3"></i>;
} else if (
outputs.network.defaultGateway?.signalStrength >= 40
) {
return <i className="nf nf-md-wifi_strength_2"></i>;
} else if (
outputs.network.defaultGateway?.signalStrength >= 25
) {
return <i className="nf nf-md-wifi_strength_1"></i>;
} else {
return <i className="nf nf-md-wifi_strength_outline"></i>;
}
default:
return (
<i className="nf nf-md-wifi_strength_off_outline"></i>
);
}
}

// Get icon to show for how much of the battery is charged.
function getBatteryIcon() {
if (outputs.battery.chargePercent > 90)
Expand All @@ -84,7 +119,7 @@
return <i className="nf nf-fa-battery_0"></i>;
}

// Get icon to show for how much of the battery is charged.
// Get icon to show for current weather status.
function getWeatherIcon() {
switch (outputs.weather.status) {
case 'clear_day':
Expand Down Expand Up @@ -160,6 +195,13 @@
</>
)}

{outputs.network && (
<div className="network">
{getNetworkIcon()}
{outputs.network.defaultGateway?.ssid}
</div>
)}

<div className="memory">
<i className="nf nf-fae-chip"></i>
{Math.round(outputs.memory.usage)}%
Expand Down Expand Up @@ -187,10 +229,12 @@
</div>
)}

<div className="weather">
{getWeatherIcon()}
{Math.round(outputs.weather.celsiusTemp)}°C
</div>
{outputs.weather && (
<div className="weather">
{getWeatherIcon()}
{Math.round(outputs.weather.celsiusTemp)}°C
</div>
)}
</div>
</div>
);
Expand Down
56 changes: 49 additions & 7 deletions examples/starter/with-komorebi.html
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@

const zebarCtx = await init();

const [komorebi, cpu, date, battery, memory, weather] =
const [network, komorebi, cpu, date, battery, memory, weather] =
await Promise.all([
zebarCtx.createProvider({ type: 'network' }),
zebarCtx.createProvider({ type: 'komorebi' }),
zebarCtx.createProvider({ type: 'cpu' }),
zebarCtx.createProvider({
Expand All @@ -45,6 +46,7 @@

function App() {
const [outputs, setOutputs] = useState({
network: network.output,
komorebi: komorebi.output,
cpu: cpu.output,
date: date.output,
Expand All @@ -54,6 +56,9 @@
});

useEffect(() => {
network.onOutput(network =>
setOutputs(outputs => ({ ...outputs, network })),
);
komorebi.onOutput(komorebi =>
setOutputs(outputs => ({ ...outputs, komorebi })),
);
Expand All @@ -74,7 +79,35 @@
);
}, []);

console.log('outputs.komorebi', outputs.komorebi);
// Get icon to show for current network status.
function getNetworkIcon() {
switch (outputs.network.defaultInterface?.type) {
case 'ethernet':
return <i className="nf nf-md-ethernet_cable"></i>;
case 'wifi':
if (outputs.network.defaultGateway?.signalStrength >= 80) {
return <i className="nf nf-md-wifi_strength_4"></i>;
} else if (
outputs.network.defaultGateway?.signalStrength >= 65
) {
return <i className="nf nf-md-wifi_strength_3"></i>;
} else if (
outputs.network.defaultGateway?.signalStrength >= 40
) {
return <i className="nf nf-md-wifi_strength_2"></i>;
} else if (
outputs.network.defaultGateway?.signalStrength >= 25
) {
return <i className="nf nf-md-wifi_strength_1"></i>;
} else {
return <i className="nf nf-md-wifi_strength_outline"></i>;
}
default:
return (
<i className="nf nf-md-wifi_strength_off_outline"></i>
);
}
}

// Get icon to show for how much of the battery is charged.
function getBatteryIcon() {
Expand All @@ -89,7 +122,7 @@
return <i className="nf nf-fa-battery_0"></i>;
}

// Get icon to show for how much of the battery is charged.
// Get icon to show for current weather status.
function getWeatherIcon() {
switch (outputs.weather.status) {
case 'clear_day':
Expand Down Expand Up @@ -141,6 +174,13 @@
<div className="center">{outputs.date.formatted}</div>

<div className="right">
{outputs.network && (
<div className="network">
{getNetworkIcon()}
{outputs.network.defaultGateway?.ssid}
</div>
)}

<div className="memory">
<i className="nf nf-fae-chip"></i>
{Math.round(outputs.memory.usage)}%
Expand Down Expand Up @@ -168,10 +208,12 @@
</div>
)}

<div className="weather">
{getWeatherIcon()}
{Math.round(outputs.weather.celsiusTemp)}°C
</div>
{outputs.weather && (
<div className="weather">
{getWeatherIcon()}
{Math.round(outputs.weather.celsiusTemp)}°C
</div>
)}
</div>
</div>
);
Expand Down

0 comments on commit 5b411e2

Please sign in to comment.