Skip to content

EO2-WAVY/WavyFrontend

Repository files navigation





Wavy - Client

인공지능 기반의 맞춤형 K-POP 댄스 학습 서비스






Introduction

Npm React Router Figma Prettier VSCode ESLint

Wavy의 Client는 위 개발 스택을 사용하여 개발되었습니다.

Getting Started

Wavy는 현재 위 URL에서 서비스되고 있습니다.

Features

Main - Video card
main-video-card
Main - Tag
main-tag
Main - Tag scroll
main-tag-scroll
Practice
practice
Challenge - start
challenge-start
Challenge - end
challenge-end
Analysis
analysis
Player - Marker and Loop
player-marker-and-loop
Review - Statistics
review-statistics
Reviw - Search
review-search
Search
search
Sign in
sign-in
Storage - Empty
storage-empty
Store
store

Directory Structure

src
├── assets
│   └── images
│   └── videos
├── components
│   └── App.tsx
│   └── Common
│   └── [PageName]
├── constants
├── hooks
│   └── api
│   └── Common
│   └── [PageName]
├── pages
│   └── [PageName]
├── router
├── store
│   └── Common
│   └── [PageName]
├── styles
│   └── global
│   └── theme
├── types
├── utils
└── index.tsx

기본적으로 파일 유형 이후 라우트에 의한 분리를 적용하였습니다.

Data Structure

상태 관리 라이브러리는 Recoil을 사용하였습니다.

store

// ConcreteDecorator
import { atom } from "recoil";

export const isPlayingState = atom<boolean>({
    key: "isPlayingState",
    default: false,
});

hook

// Decorator
import { useRecoilState } from "recoil";
import { isPlayingState } from "store";

const useControllerPlaying = () => {
    const [isPlaying, setIsPlaying] = useRecoilState(isPlayingState);
    const toggleIsPlaying = () => setIsPlaying((prev) => !prev);

    return { isPlaying, setIsPlaying, toggleIsPlaying };
};

export default useControllerPlaying;

component

// Component
import useControllerPlaying from "hooks/useControllerPlaying";

const someComponent = () => {
    const { isPlaying, toggleIsPlaying } = useControllerPlaying();

    return (
        <button onClick={toggleIsPlaying}>{isPlaying ? "중지" : "재생"}</button>
    );
};

전역 상태의 경우 store의 atom을 ConcreteDecorator 로써, hook을 Decorator 로써, Component를 Component 역할로써 Decorator 패턴을 각색하여 개발 및 사용하였습니다.

Developer

해당 프로젝트는 소프트웨어 마에스트로 사업의 지원을 받아 개발되었습니다.

FE: hyesungoh AI: haeseoklee BE: Yeonwu

License

WavyMIT License를 적용하고 있습니다.