commit 1c8b11eb3e5edbda96ee67f0334831a8d444d2e8
parent bc8669a98a082dd8cae08fa9e0842bba0c611b27
Author: Agastya Chandrakant <me@hanabi.in>
Date: Mon, 18 May 2020 02:43:56 +0530
Add implementation
Diffstat:
2 files changed, 92 insertions(+), 24 deletions(-)
diff --git a/src/comp/autoCompleteText.js b/src/comp/autoCompleteText.js
@@ -0,0 +1,75 @@
+import React from 'react';
+import moment from 'moment-timezone';
+
+function AutoCompleteText({ defaultValue = '', changeValue }) {
+ const options = moment.tz
+ .names()
+ .sort()
+ .map((el) => el.replace(/_/g, ' '));
+ const [suggestions, setSuggestions] = React.useState([]);
+ const [inputVal, setInputVal] = React.useState(
+ defaultValue.replace(/_/g, ' ')
+ );
+ function handleChange(event) {
+ const { value: input } = event.target;
+ setInputVal(input);
+ let recommendations = [];
+ if (input.length) {
+ recommendations = [
+ ...recommendations,
+ ...options.filter((val) =>
+ val.toLowerCase().includes(input.toLowerCase())
+ ),
+ ];
+ }
+ setSuggestions(Array.from(new Set([...recommendations])));
+ }
+
+ function handleClick(value) {
+ setSuggestions([]);
+ setInputVal(value);
+ changeValue(value.replace(/ /g, '_'));
+ }
+
+ return (
+ <h2 aria-level="2" id="converted-time-lbl">
+ <input
+ role="searchbox"
+ autoFocus
+ className="w-75"
+ id="converted-time-lbl-input"
+ name="converted-time-lbl-input"
+ onChange={handleChange}
+ type="text"
+ placeholder="Time Zone"
+ aria-placeholder="Time Zone"
+ value={inputVal}
+ maxLength={100}
+ />
+ <div
+ id="suggestion-list"
+ style={{ maxHeight: '50vh', overflow: 'scroll' }}
+ >
+ <h6 aria-level="6">
+ <ul className="list-group" role="list">
+ {suggestions.length > 0
+ ? suggestions.map((el, i) => (
+ <li
+ className="list-group-item list-group-item-action"
+ key={i}
+ onClick={() => handleClick(el)}
+ role="listitem"
+ // style={{ paddingLeft: 0 }}
+ >
+ {el.replace(/_/g, ' ')}
+ </li>
+ ))
+ : null}
+ </ul>
+ </h6>
+ </div>
+ </h2>
+ );
+}
+
+export default AutoCompleteText;
diff --git a/src/comp/currentTime.js b/src/comp/currentTime.js
@@ -1,5 +1,6 @@
import React from 'react';
import moment from 'moment-timezone';
+import AutoCompleteText from './autoCompleteText';
function useTime() {
const [time, setTime] = React.useState(new Date());
@@ -15,47 +16,39 @@ function useTime() {
function CurrentTime() {
const now = useTime();
- const [TZ, setTZ] = React.useState('UTC');
+ const [TZ, setTZ] = React.useState('America/New_York');
const ISOtime = now.toISOString();
- const localTZ = moment.tz.guess().replace(/_/g, ' ');
+ const tz = moment.tz.guess();
+ const localTZ = tz.replace(/_/g, ' ');
const nowMoment = moment(ISOtime);
- const timezoneList = moment.tz.names();
+ const localAbbr = moment.tz.zone(tz).abbr(nowMoment);
+ const otherAbbr = moment.tz.zone(TZ).abbr(nowMoment);
return (
- <>
+ <div className="time-conversion">
<div className="row mb-3" id="labels">
<div className="col text-right" id="local-time-lbl-box">
- <h1 id="local-time-lbl">Local time ({localTZ})</h1>
+ <h2 aria-level="2" id="local-time-lbl">
+ Local time ({localTZ})
+ </h2>
</div>
<div className="col" id="converted-time-lbl-box">
- <h1 id="converted-time-lbl">
- <form autoComplete="off">
- <div className="autocomplete">
- <input
- className="border-0"
- id="myInput"
- name="myTZ"
- type="text"
- placeholder="Time Zone"
- defaultValue={nowMoment.tz(TZ).tz().replace(/_/g, ' ')}
- />
- </div>
- </form>
- </h1>
+ <AutoCompleteText defaultValue={TZ} changeValue={setTZ} />
</div>
</div>
<div className="row" id="times">
<div className="col text-right" id="local-time-box">
- <h4 id="local-time">
- {nowMoment.tz(localTZ).format('HH:mm:ss MMM DD, YYYY')}
+ <h4 aria-level="4" id="local-time">
+ {nowMoment.tz(localTZ).format('HH:mm:ss MMM DD, YYYY')} ({localAbbr}
+ )
</h4>
</div>
<div className="col" id="converted-time-box">
- <h4 id="converted-time">
- {nowMoment.tz(TZ).format('HH:mm:ss MMM DD, YYYY')}
+ <h4 aria-level="4" id="converted-time">
+ {nowMoment.tz(TZ).format('HH:mm:ss MMM DD, YYYY')} ({otherAbbr})
</h4>
</div>
</div>
- </>
+ </div>
);
}