Merge pull request #103 from emrysal/feature/implement-react-timezone-select
Implemented react-timezone-select library
This commit is contained in:
		
						commit
						18d1974ae0
					
				
					 5 changed files with 301 additions and 230 deletions
				
			
		| 
						 | 
					@ -8,7 +8,7 @@ export default function SettingsShell(props) {
 | 
				
			||||||
        <div>
 | 
					        <div>
 | 
				
			||||||
            <main className="relative -mt-32">
 | 
					            <main className="relative -mt-32">
 | 
				
			||||||
                <div>
 | 
					                <div>
 | 
				
			||||||
                    <div className="bg-white rounded-lg shadow overflow-hidden">
 | 
					                    <div className="bg-white rounded-lg shadow">
 | 
				
			||||||
                        <div className="divide-y divide-gray-200 lg:grid lg:grid-cols-12 lg:divide-y-0 lg:divide-x">
 | 
					                        <div className="divide-y divide-gray-200 lg:grid lg:grid-cols-12 lg:divide-y-0 lg:divide-x">
 | 
				
			||||||
                            <aside className="py-6 lg:col-span-3">
 | 
					                            <aside className="py-6 lg:col-span-3">
 | 
				
			||||||
                                <nav className="space-y-1">
 | 
					                                <nav className="space-y-1">
 | 
				
			||||||
| 
						 | 
					@ -84,4 +84,4 @@ export default function SettingsShell(props) {
 | 
				
			||||||
            </main>
 | 
					            </main>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,7 @@
 | 
				
			||||||
module.exports = {
 | 
					const withTM = require('next-transpile-modules')(['react-timezone-select']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = withTM({
 | 
				
			||||||
  typescript: {
 | 
					  typescript: {
 | 
				
			||||||
    ignoreBuildErrors: true,
 | 
					    ignoreBuildErrors: true,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
}
 | 
					});
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,8 +19,10 @@
 | 
				
			||||||
    "ics": "^2.27.0",
 | 
					    "ics": "^2.27.0",
 | 
				
			||||||
    "next": "10.0.8",
 | 
					    "next": "10.0.8",
 | 
				
			||||||
    "next-auth": "^3.13.2",
 | 
					    "next-auth": "^3.13.2",
 | 
				
			||||||
 | 
					    "next-transpile-modules": "^6.4.1",
 | 
				
			||||||
    "react": "17.0.1",
 | 
					    "react": "17.0.1",
 | 
				
			||||||
    "react-dom": "17.0.1"
 | 
					    "react-dom": "17.0.1",
 | 
				
			||||||
 | 
					    "react-timezone-select": "^0.10.7"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@types/node": "^14.14.33",
 | 
					    "@types/node": "^14.14.33",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@ import Modal from '../../components/Modal';
 | 
				
			||||||
import Shell from '../../components/Shell';
 | 
					import Shell from '../../components/Shell';
 | 
				
			||||||
import SettingsShell from '../../components/Settings';
 | 
					import SettingsShell from '../../components/Settings';
 | 
				
			||||||
import { signIn, useSession, getSession } from 'next-auth/client';
 | 
					import { signIn, useSession, getSession } from 'next-auth/client';
 | 
				
			||||||
 | 
					import TimezoneSelect from 'react-timezone-select';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function Settings(props) {
 | 
					export default function Settings(props) {
 | 
				
			||||||
    const [ session, loading ] = useSession();
 | 
					    const [ session, loading ] = useSession();
 | 
				
			||||||
| 
						 | 
					@ -13,7 +14,8 @@ export default function Settings(props) {
 | 
				
			||||||
    const usernameRef = useRef();
 | 
					    const usernameRef = useRef();
 | 
				
			||||||
    const nameRef = useRef();
 | 
					    const nameRef = useRef();
 | 
				
			||||||
    const descriptionRef = useRef();
 | 
					    const descriptionRef = useRef();
 | 
				
			||||||
    const timezoneRef = useRef();
 | 
					
 | 
				
			||||||
 | 
					    const [ selectedTimeZone, setSelectedTimeZone ] = useState({ value: props.user.timeZone });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (loading) {
 | 
					    if (loading) {
 | 
				
			||||||
        return <p className="text-gray-400">Loading...</p>;
 | 
					        return <p className="text-gray-400">Loading...</p>;
 | 
				
			||||||
| 
						 | 
					@ -31,13 +33,13 @@ export default function Settings(props) {
 | 
				
			||||||
        const enteredUsername = usernameRef.current.value;
 | 
					        const enteredUsername = usernameRef.current.value;
 | 
				
			||||||
        const enteredName = nameRef.current.value;
 | 
					        const enteredName = nameRef.current.value;
 | 
				
			||||||
        const enteredDescription = descriptionRef.current.value;
 | 
					        const enteredDescription = descriptionRef.current.value;
 | 
				
			||||||
        const enteredTimezone = timezoneRef.current.value;
 | 
					        const enteredTimeZone = selectedTimeZone.value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // TODO: Add validation
 | 
					        // TODO: Add validation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const response = await fetch('/api/user/profile', {
 | 
					        const response = await fetch('/api/user/profile', {
 | 
				
			||||||
            method: 'PATCH',
 | 
					            method: 'PATCH',
 | 
				
			||||||
            body: JSON.stringify({username: enteredUsername, name: enteredName, description: enteredDescription, timeZone: enteredTimezone}),
 | 
					            body: JSON.stringify({username: enteredUsername, name: enteredName, description: enteredDescription, timeZone: enteredTimeZone}),
 | 
				
			||||||
            headers: {
 | 
					            headers: {
 | 
				
			||||||
                'Content-Type': 'application/json'
 | 
					                'Content-Type': 'application/json'
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -95,109 +97,7 @@ export default function Settings(props) {
 | 
				
			||||||
                                        Timezone
 | 
					                                        Timezone
 | 
				
			||||||
                                    </label>
 | 
					                                    </label>
 | 
				
			||||||
                                    <div className="mt-1">
 | 
					                                    <div className="mt-1">
 | 
				
			||||||
                                        <select name="timezone" id="timeZone" defaultValue={props.user.timeZone} ref={timezoneRef} className="shadow-sm focus:ring-blue-500 focus:border-blue-500 mt-1 block w-full sm:text-sm border-gray-300 rounded-md">
 | 
					                                        <TimezoneSelect id="timeZone" value={selectedTimeZone} onChange={setSelectedTimeZone} className="shadow-sm focus:ring-blue-500 focus:border-blue-500 mt-1 block w-full sm:text-sm border-gray-300 rounded-md" />
 | 
				
			||||||
                                          <option disabled style={{display: "none"}}>Time Zone...</option>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                          <optgroup label="Common">
 | 
					 | 
				
			||||||
                                            <option value="GMT">Dublin, Edinburgh, Lisbon, London</option>
 | 
					 | 
				
			||||||
                                            <option value="Europe/Brussels">Brussels, Copenhagen, Madrid, Paris</option>
 | 
					 | 
				
			||||||
                                          </optgroup>
 | 
					 | 
				
			||||||
                                          <optgroup label="America">
 | 
					 | 
				
			||||||
                                            <option value="America/Juneau">Alaska</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Phoenix">Arizona</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Belize">Central America</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Bogota">Bogota, Lima, Quito</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Boise">Mountain Time (US and Canada)</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Argentina/Buenos_Aires">Buenos Aires, Georgetown</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Caracas">Caracas, La Paz</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Chicago">Chicago, Central Time</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Chihuahua">Chihuahua, La Paz, Mazatlan</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Dawson">Dawson</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Detroit">Detroit</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Glace_Bay">Atlantic Time, Canada</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Godthab">Greenland</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Indiana/Indianapolis">Indiana (East), Indianapolis</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Mexico_City">Guadalajara, Mexico City, Monterrey</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Regina">Saskatchewan</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Santiago">Santiago</option>
 | 
					 | 
				
			||||||
                                            <option value="America/Sao_Paulo">Sao Paulo, Brasilia</option>
 | 
					 | 
				
			||||||
                                            <option value="America/St_Johns">Newfoundland and Labrador</option>
 | 
					 | 
				
			||||||
                                          </optgroup>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                          <optgroup label="Europe">
 | 
					 | 
				
			||||||
                                            <option value="Europe/Amsterdam">Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna</option>
 | 
					 | 
				
			||||||
                                            <option value="Europe/Athens">Athens, Istanbul, Minsk</option>
 | 
					 | 
				
			||||||
                                            <option value="Europe/Belgrade">Belgrade, Bratislava, Budapest, Ljubljana, Prague</option>
 | 
					 | 
				
			||||||
                                            <option value="Europe/Brussels">Brussels, Copenhagen, Madrid, Paris</option>
 | 
					 | 
				
			||||||
                                            <option value="Europe/Bucharest">Bucharest</option>
 | 
					 | 
				
			||||||
                                            <option value="GMT">Dublin, Edinburgh, Lisbon, London</option>
 | 
					 | 
				
			||||||
                                            <option value="Europe/Helsinki">Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius</option>
 | 
					 | 
				
			||||||
                                            <option value="Europe/Moscow">Moscow, St. Petersburg, Volgograd</option>
 | 
					 | 
				
			||||||
                                          </optgroup>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                          <optgroup label="Asia">
 | 
					 | 
				
			||||||
                                            <option value="Asia/Almaty">Almaty, Novosibirsk</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Baghdad">Baghdad</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Baku">Baku, Tbilisi, Yerevan</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Bangkok">Bangkok, Hanoi, Jakarta</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Colombo">Sri Jayawardenepura</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Dhaka">Dhaka, Astana</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Dubai">Abu Dhabi, Muscat</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Irkutsk">Irkutsk, Ulaanbaatar</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Jerusalem">Jerusalem</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Kabul">Kabul</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Karachi">Karachi, Islamabad, Tashkent</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Kolkata">Kolkata, Chennai, Mumbai, New Delphi</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Krasnoyarsk">Krasnoyarsk</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Kuala_Lumpur">Kuala Lumpur, Singapore</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Kuwait">Kuwait</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Magadan">Magadan, Solomon Islands, New Caledonia</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Rangoon">Yangon Rangoon</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Seoul">Seoul</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Shanghai">Beijing, Chongqing, Hong Kong SAR, Urumqi</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Tehran">Tehran</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Tokyo">Tokyo, Osaka, Sapporo</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Vladivostok">Vladivostok</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Yakutsk">Yakutsk</option>
 | 
					 | 
				
			||||||
                                            <option value="Asia/Yekaterinburg">Yekaterinburg</option>
 | 
					 | 
				
			||||||
                                          </optgroup>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                          <optgroup label="Africa">
 | 
					 | 
				
			||||||
                                            <option value="Africa/Cairo">Cairo</option>
 | 
					 | 
				
			||||||
                                            <option value="Africa/Casablanca">Casablanca, Monrovia</option>
 | 
					 | 
				
			||||||
                                            <option value="Africa/Algiers">West Central Africa</option>
 | 
					 | 
				
			||||||
                                            <option value="Africa/Harare">Harare, Pretoria</option>
 | 
					 | 
				
			||||||
                                            <option value="Africa/Nairobi">Nairobi</option>
 | 
					 | 
				
			||||||
                                          </optgroup>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                          <optgroup label="Australia">
 | 
					 | 
				
			||||||
                                            <option value="Australia/Adelaide">Adelaide</option>
 | 
					 | 
				
			||||||
                                            <option value="Australia/Brisbane">Brisbane</option>
 | 
					 | 
				
			||||||
                                            <option value="Australia/Darwin">Darwin</option>
 | 
					 | 
				
			||||||
                                            <option value="Australia/Hobart">Hobart, Tasmania</option>
 | 
					 | 
				
			||||||
                                            <option value="Australia/Perth">Perth</option>
 | 
					 | 
				
			||||||
                                            <option value="Australia/Sydney">Sydney, Melbourne, Canberra</option>
 | 
					 | 
				
			||||||
                                          </optgroup>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                          <optgroup label="Atlantic">
 | 
					 | 
				
			||||||
                                            <option value="Atlantic/Azores">Azores</option>
 | 
					 | 
				
			||||||
                                            <option value="Atlantic/Cape_Verde">Cape Verde Islands</option>
 | 
					 | 
				
			||||||
                                            <option value="Atlantic/Canary">Canary Islands</option>
 | 
					 | 
				
			||||||
                                            <option value="Etc/GMT+2">Mid-Atlantic</option>
 | 
					 | 
				
			||||||
                                          </optgroup>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                          <optgroup label="Pacific">
 | 
					 | 
				
			||||||
                                            <option value="Pacific/Auckland">Auckland, Wellington</option>
 | 
					 | 
				
			||||||
                                            <option value="Pacific/Fiji">Fiji Islands, Kamchatka, Marshall Islands</option>
 | 
					 | 
				
			||||||
                                            <option value="Pacific/Guam">Guam, Port Moresby</option>
 | 
					 | 
				
			||||||
                                            <option value="Pacific/Tongatapu">Nuku'alofa</option>
 | 
					 | 
				
			||||||
                                          </optgroup>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                          <optgroup label="Antarctica">
 | 
					 | 
				
			||||||
                                            <option value="Antarctica/McMurdo">McMurdo, South Pole</option>
 | 
					 | 
				
			||||||
                                          </optgroup>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                        </select>
 | 
					 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue