Skip to content

Commit

Permalink
[1단계 - 지하철 노선도 미션] 지그(송지은) 미션 제출합니다. (#13)
Browse files Browse the repository at this point in the history
* Update README.md

* chore: 초기 환경 세팅
- eslint, prettier 설정
- storybook 설치
- emotion 설치

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* docs: 구현 기능 목록 작성

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 페이지 생성 및 라우팅

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: App style 설정 및 BaseLayout 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: NavBar 컴포넌트 구현 및 라우터 연결

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: CardLayout 컴포넌트 구현

Co-authored-by: jieun song <zigsong@users.noreply.github.com>

* feat: Logo에 라우터 연결

Co-authored-by: jieun song <zigsong@users.noreply.github.com>

* feat: TextButton 컴포넌트 구현
Co-authored-by: jieun song <zigsong@users.noreply.github.com>

* feat: TextButton 컴포넌트 구현

Co-authored-by: jieun song <zigsong@users.noreply.github.com>

* feat: IconButton 컴포넌트 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* chore: babel-plugin 설정

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: Input 컴포넌트 구현

* feat: Dropdown 컴포넌트 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: Modal 컴포넌트 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: StationPage 컴포넌트 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: LinePage 컴포넌트 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: SectionPage 컴포넌트 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: SectionModal 컴포넌트 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: LineModal 컴포넌트 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: StationPage 내 역 수정 form 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: LineModal 수정 폼 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: SectionModal에 선택한 노선 전달

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* refactor: storybook에 필요한 arguments 전달

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: LineModal, SectionModal의 storybook 작성

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: LoginPage 컴포넌트 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: SignupPage 컴포넌트 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: useFetch 함수 구현

- 지하철역 불러오기
- 지하철역 생성
- 지하철역 삭제

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 노선 관리 api 적용

- 노선 생성
- 노선 삭제

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 노선 수정 api 적용

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 구간 관리 api 적용

- 구간 생성
- 구간 삭제

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 회원가입 api 적용

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 로그인 api 적용

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* refactor: 노선 정보 최신 상태 반영 로직 개선

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: Notification 컴포넌트 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 역 관리 페이지 input 유효성 검사

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 노선 관리 페이지 input 유효성 검사

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 구간 관리 페이지 input 유효성 검사

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 회원가입 페이지 비밀번호 확인 input 유효성 검사

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 로그인 성공 여부 검사

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* refactor: api 요청 방식 변경

- useFetch 삭제

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: redux toolkit으로 user 상태 전역 관리 적용

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: user의 로그인 여부에 따른 페이지 관리

- 로그인, 회원가입, 로그아웃 기능 구현
- 접근 권한이 없는 페이지 접속 시 랜딩 페이지로 리다이렉션

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: serverSlice  구현

- request에 BASE_URL 전달

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: ServerSelector 컴포넌트 구현

- 로그인/회원가입 시 서버 선택 유도
- 로그아웃 시 선택 서버 초기화

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 컴포넌트에 전달하는 prop interface 이름 통일

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: ServerSelector 스토리북 작성

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* refactor: LineModal, SectionModal 스토리북 인자 전달

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* fix: 새로고침 시 user 로그인 정보 유지

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 유저 인터랙션에 따른 응답 메시지를 스낵바로 표시

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* refactor: alert를 snackbar로 변경

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* refactor: modal 리팩토링

- modal open 시 form reset
- 숫자 입력 폼 max값 제한
- dropdown에 value 추가

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 지하철역 이름 수정 기능 구현

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 회원가입 시 이메일 중복 여부 확인

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* feat: 회원가입, 로그인 폼 아이콘 추가

- 서버 선택지 위치 변경

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* fix: end point 수정

Co-authored-by: jieun song <zigsong@users.noreply.github.com>

* fix: 지하철역 이름 변경 시 유효성 검사

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* refactor: ServerSelector 위치 수정

-NavBar amrgin 조정

Co-authored-by: jieun song <zigsong@users.noreply.github.com>

* refactor: ServerSelector 위치 수정

- NavBar margin 조정

Co-authored-by: jieun song <zigsong@users.noreply.github.com>

* feat: 랜딩 페이지 UI 개선

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* refactor: useFetch hook 구현

- api 요청 중복 코드 개선
- Loading 시 spinner 표시

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* chore: React Testing Library 초기 설정

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* test: RTL test for StationPage

Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>

* test: separate test tools & created LinePage test

* refactor: remove emotion theme provider

* fix: add readOnly attr to colorOption

* refactor: created useNotify hook

* chore: setting for  netlify redirection

* refactor: change return type of useFetch hook

* refactor: assign default fetch method to useFetch

Co-authored-by: 공원 <81607552+woowapark@users.noreply.github.com>
Co-authored-by: HyuuunjuKim <HyuuunjuKim@users.noreply.github.com>
Co-authored-by: HyuuunjuKim <43339385+HyuuunjuKim@users.noreply.github.com>
Co-authored-by: jieun song <zigsong@users.noreply.github.com>
  • Loading branch information
5 people authored Jun 5, 2021
1 parent d1a8bed commit 0f8ec7f
Show file tree
Hide file tree
Showing 103 changed files with 20,239 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"plugins": ["@emotion"]
}
26 changes: 26 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"parser": "@typescript-eslint/parser",
"extends": [
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended"
],
"plugins": ["react", "@typescript-eslint", "prettier"],
"parserOptions": {
"ecmaVersion": 6,
"ecmaFeatures": {
"jsx": true
},
"project": "./tsconfig.json"
},
"rules": {
"@typescript-eslint/explicit-module-boundary-types": "off",
"react/jsx-filename-extension": [
1,
{
"extensions": [".js", ".jsx", ".ts", ".tsx"]
}
]
},
"ignorePatterns": ["*.config.js"]
}
23 changes: 23 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
9 changes: 9 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"singleQuote": true,
"semi": true,
"useTabs": false,
"tabWidth": 2,
"trailingComma": "all",
"printWidth": 100,
"endOfLine": "lf"
}
29 changes: 29 additions & 0 deletions .storybook/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
const path = require('path');
const toPath = (_path) => path.join(process.cwd(), _path);

module.exports = {
stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
addons: [
'@storybook/addon-links',
'@storybook/addon-essentials',
'@storybook/preset-create-react-app',
],
babel: async (options) => ({
...options,
plugins: ['@emotion'],
}),
webpackFinal: async (config) => {
return {
...config,
resolve: {
...config.resolve,
alias: {
...config.resolve.alias,
'@emotion/core': toPath('node_modules/@emotion/react'),
'@emotion/styled': toPath('node_modules/@emotion/styled'),
'emotion-theming': toPath('node_modules/@emotion/react'),
},
},
};
},
};
26 changes: 26 additions & 0 deletions .storybook/preview.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import * as React from 'react';
import { Provider } from 'react-redux';
import { MemoryRouter as Router } from 'react-router-dom';
import { configure, addDecorator } from '@storybook/react';
import { Global } from '@emotion/react';
import store from 'modules/store';
import { globalStyle } from '../src/App.styles';

export const parameters = {
actions: { argTypesRegex: '^on[A-Z].*' },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
},
},
};

addDecorator((story) => (
<Provider store={store}>
<Global styles={globalStyle} />
<Router>{story()}</Router>
</Provider>
));

configure(require.context('../src', true, /\.stories\.js?$/), module);
76 changes: 75 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,76 @@
# react-subway-map
⚛️ React 지하철 노선도 관리 페이지

# 🚇 지하철 노선도 - 레벨2 종합세트 & 테스트


# 미션 목표

- 레벨 2에서 학습한 컴포넌트 기반 개발, 상태 관리 방법에 대한 내용을 전반적으로 복습하며 적용하는 연습을 합니다.
- React에 관한 개념을 전반적으로 복습하며 적용해봅니다.
이번 미션에서 React와 관련한 추가 개념은 다루지 않습니다.
- 테스트를 고려하며 개발하는 연습을 합니다.
- 백엔드 개발자와 협업하기 위한 커뮤니케이션 경험을 쌓습니다.

# 미션 진행 방식

- 프론트엔드 페어 운영 방식 및 프론트엔드 리뷰 프로세스는 동일합니다.
- step1은 페어로 진행, step2는 개별로 진행
- 각 step당 1번씩 리뷰어에게 PR로 리뷰 요청
- 백엔드 개발자와의 협업 경험을 위해 백엔드 크루들이 협업 페어로 매칭됩니다.
- 프론트엔드 1 페어당 백엔드 2 페어가 매칭됩니다. (프론트 크루 2명 + 백엔드 크루 4명)
- 매칭된 백엔드 크루들과 배포 일정, API 설계 논의 일정 등을 자율적으로 논의해 진행해주세요.
- 백엔드 크루들의 API가 배포 완료되기 전까지는 [API명세 문서](https://woowacourse.github.io/atdd-subway-fare/)를 확인하여 개발을 먼저 진행합니다.

---

# 미션 요구사항

각 step의 상세 요구사항은 다음 페이지를 확인해주세요.

## step1) 협업 논의 + 테스트 코드와 함께 지하철 노선도 관리 페이지 기본 구현
```
구현 마감은 5/27(목) 입니다. 원활한 협업이 될 수 있도록 일정을 잘 협의해주세요 :)
```

<br/>

**협업 요구사항**

- 백엔드 페어와 협업을 위해 필요한 사항들을 논의합니다.
- step1에서 사용할 API의 배포 일정, 이후 step2에서의 추가 개발을 위한 설계 논의, 그 외 필요한 사항들 있는 지 확인
- <span class="highlight-cyan">배포한 API 4개 중 하나를 무작위로 연결</span>하더라도 어플리케이션이 정상 동작해야 합니다.
- 무작위 연결을 확인해볼 수 있는 방법은 페어와 자율적으로 결정합니다. (단, 코드를 직접 수정해야 하는 방법은 제외)
<br/>

**구현 요구사항**

- 요구사항 명세를 먼저 작성합니다.
- <span class="highlight-cyan">상태 관리 방법을 스스로 선택</span>합니다. 선택한 상태 관리 방법이 적절하다고 생각한 이유를 명시해주세요.
- 레벨 1에서 구현했던 기능들을 React로 다시 구현해보는 작업입니다. 레벨 1에서 개발했던 어플리케이션을 다시 확인해보세요.
<br/>

**테스트 요구사항**

- 각 기능별로 <span class="highlight-cyan">테스트 코드를 반드시 포함</span>합니다.


---
## step2) 백엔드 개발자와 함께 추가 기능 구현
```
구현 마감은 6/3(목) 입니다. 원활한 협업이 될 수 있도록 일정을 잘 협의해주세요 :)
```


**협업 요구사항**

- 백엔드 개발자와 API 설계 논의부터 함께합니다.
- <span class="highlight-cyan">배포한 API 4개 중 하나를 무작위로 연결</span>하더라도 어플리케이션이 정상 동작해야 합니다.
- 무작위 연결을 확인해볼 수 있는 방법은 페어와 자율적으로 결정합니다. (단, 코드를 직접 수정해야 하는 방법은 제외)
- (기본) 전체보기 기능을 추가로 구현합니다.
- 백엔드 API 신규 개발이 필요합니다. 새로 만들어야 하는 API 명세를 함께 논의하며 개발합니다.
- (선택) 경로 찾기 기능을 추가로 구현합니다.
- 이미 개발되어 있는 백엔드 API가 있습니다. 기존의 API 명세를 확인하고 수정이 필요한 부분이 있는 지 논의하며 개발합니다.


**구현 요구사항**
- 추가 기능을 위한 UI는 직접 설계하고 만듭니다.
34 changes: 34 additions & 0 deletions REQUIREMENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
## ✅ Todos - 1단계

### 회원 기능
[ ] 사용자는 회원 가입을 할 수 있다.
- [ ] 이름, 이메일, 비밀번호, 비밀번호 확인 정보를 입력한다.
- [ ] 가입 시 이미 가입한 이메일인지 중복 확인한다.
[ ] 사용자는 가입한 계정으로 로그인을 할 수 있다.
- [ ] 로그인에 실패한 경우 안내 메시지를 보여준다.
[ ] 로그인한 사용자만 지하철 노선도 관리 페이지에 접근할 수 있다.

### 역 관리 기능
[ ] 사용자는 지하철 역을 추가할 수 있다.
- [ ] 역 이름은 2자 이상 20자 이하의 한글(숫자 포함. 공백 허용 X)만 허용한다.
[ ] 사용자는 지하철 역을 삭제할 수 있다.
- [ ] 노선에 등록되어 있는 역인 경우 삭제할 수 없다.
[ ] 사용자는 등록되어 있는 전체 지하철 역 목록을 조회할 수 있다.

### 노선 관리 기능
[ ] 사용자는 지하철 노선을 추가할 수 있다.
- [ ] 노선 이름, 상행역, 하행역, (최초 상행역과 하행역 구간의)거리, (최초 상행역과 하행역 구간 통행에 걸리는)시간, 색상을 선택한다.
- [ ] 노선 이름은 2자 이상 10자 이하의 한글 (숫자 포함. 공백 허용 X)만 허용한다.
- [ ] 상행역, 하행역은 기존에 등록되어 있는 지하철 역 목록 중에서 선택한다.
- [ ] 색상은 미리 지정되어 있는 10가지 색상 중 한 색상을 선택한다.
- [ ] 다른 노선에서 사용하는 색은 선택할 수 없다.
[ ] 사용자는 등록되어 있는 지하철 노선을 삭제할 수 있다.
[ ] 사용자는 등록되어 있는 전체 지하철 노선 목록을 조회할 수 있다.

### 구간 관리 기능
[ ] 사용자는 특정 지하철 노선에 구간을 추가할 수 있다.
- [ ] 하나의 역은 여러 개 노선에 중복되어 포함될 수 있다.
- [ ] 역과 역 사이에 새로운 역을 추가할 수 있다.
- [ ] 하나의 노선에서 갈래길은 생길 수 없다.
[ ] 사용자는 노선에 등록되어 있는 구간을 삭제할 수 있다.
[ ] 사용자는 특정 노선의 전체 구간 목록을 조회할 수 있다.
5 changes: 5 additions & 0 deletions config-overrides.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/* eslint-disable */

const { override, useBabelRc } = require('customize-cra');

module.exports = override(useBabelRc());
97 changes: 97 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
{
"name": "react-subway-map",
"version": "0.1.0",
"private": true,
"contributors": [
{
"name": "ella",
"email": "gus7wn@gmail.com",
"url": "https://hyuuunjukim.github.io/"
},
{
"name": "zigsong",
"email": "wldms5764@gmail.com",
"url": "https://zigsong.github.io/"
}
],
"dependencies": {
"@emotion/react": "^11.4.0",
"@emotion/styled": "^11.3.0",
"@material-ui/core": "^5.0.0-alpha.34",
"@reduxjs/toolkit": "^1.5.1",
"@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0",
"@testing-library/user-event": "^12.1.10",
"@types/jest": "^26.0.15",
"@types/node": "^12.0.0",
"@types/react": "^17.0.0",
"@types/react-dom": "^17.0.0",
"@types/react-router-dom": "^5.1.7",
"axios": "^0.21.1",
"notistack": "^1.0.7",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-redux": "^7.2.4",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.3",
"redux": "^4.1.0",
"typescript": "^4.1.2",
"web-vitals": "^1.0.1"
},
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-app-rewired eject",
"storybook": "start-storybook -p 6006 -s public",
"build-storybook": "build-storybook -s public"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
],
"overrides": [
{
"files": [
"**/*.stories.*"
],
"rules": {
"import/no-anonymous-default-export": "off"
}
}
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@emotion/babel-plugin": "^11.3.0",
"@storybook/addon-actions": "^6.2.9",
"@storybook/addon-essentials": "^6.2.9",
"@storybook/addon-links": "^6.2.9",
"@storybook/node-logger": "^6.2.9",
"@storybook/preset-create-react-app": "^3.1.7",
"@storybook/react": "^6.2.9",
"@typescript-eslint/eslint-plugin": "^4.24.0",
"@typescript-eslint/parser": "^4.24.0",
"babel-jest": "^26.6.0",
"babel-loader": "8.1.0",
"customize-cra": "^1.0.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-react": "^7.23.2",
"msw": "^0.29.0",
"prettier": "^2.3.0",
"react-app-rewired": "^2.1.8"
}
}
Binary file added public/favicon.ico
Binary file not shown.
20 changes: 20 additions & 0 deletions public/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>

<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />

<title>React Subway Map</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
25 changes: 25 additions & 0 deletions public/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
4 changes: 4 additions & 0 deletions public/netlify.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
3 changes: 3 additions & 0 deletions public/robots.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:
Loading

0 comments on commit 0f8ec7f

Please sign in to comment.