frontend-opensource-project / use-react-hooks

React hoooooooks๐Ÿ˜Ž
5 stars 0 forks source link

[URH-62] usePermission ์‹ ๊ทœ #49

Closed jeongbaebang closed 1 week ago

jeongbaebang commented 1 month ago

๐Ÿ‘พ Pull Request

1๏ธโƒฃ Spec

2๏ธโƒฃ ๋ณ€๊ฒฝ ์‚ฌํ•ญ

3๏ธโƒฃ ์˜ˆ์‹œ ์ฝ”๋“œ

import React, { useState } from 'react';
import usePermission from './hooks/usePermission';

const LocationComponent: React.FC = () => {
  const { status } = usePermission({ permission: 'geolocation' });
  const [location, setLocation] = useState<{
    latitude: number;
    longitude: number;
  } | null>(null);

  const handleGetLocation = () => {
    if (status === 'prompt' || status === 'granted') {
      navigator.geolocation.getCurrentPosition(
        (position) => {
          setLocation({
            latitude: position.coords.latitude,
            longitude: position.coords.longitude,
          });
        },
        (error) => {
          console.error('์œ„์น˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.', error);
        }
      );
    } else {
      alert('์œ„์น˜ ์ •๋ณด ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.');
    }
  };

  return (
    <div>
      <h2>์œ„์น˜ ์ •๋ณด ๊ถŒํ•œ ์ƒํƒœ: {status}</h2>
      <button onClick={handleGetLocation}>์œ„์น˜ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ</button>
      {location && (
        <div>
          <p>์œ„๋„: {location.latitude}</p>
          <p>๊ฒฝ๋„: {location.longitude}</p>
        </div>
      )}
      {status === 'prompt' && <p>์œ„์น˜ ์ •๋ณด ์ ‘๊ทผ ๊ถŒํ•œ์„ ์š”์ฒญ ์ค‘์ž…๋‹ˆ๋‹ค...</p>}
      {status === 'denied' && (
        <p>
          ์œ„์น˜ ์ •๋ณด ์ ‘๊ทผ ๊ถŒํ•œ์ด ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •์—์„œ ๊ถŒํ•œ์„ ํ—ˆ์šฉํ•ด ์ฃผ์„ธ์š”.
        </p>
      )}
      {status === 'notSupported' && (
        <p>์ด ๋ธŒ๋ผ์šฐ์ €๋Š” ์œ„์น˜ ์ •๋ณด ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.</p>
      )}
    </div>
  );
};

export default LocationComponent;

4๏ธโƒฃ ๊ด€๋ จ ๋ฌธ์„œ (์„ ํƒ ์‚ฌํ•ญ)