From 3855fcaff93dfe40c42216bc296cd7323143eeb4 Mon Sep 17 00:00:00 2001 From: kimhji <126762281+kimhji@users.noreply.github.com> Date: Tue, 26 Nov 2024 16:14:27 +0900 Subject: [PATCH 01/10] Fix #152#153#156 lotus sort etc (#157) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(#152): lotus 목록 순서 최신순으로 변경 및 pagination 로직 수정 * fix(#152): docker remove 주석 풀기 * fix(#152): 사용자 lotus 목록 조회 도중 사용자 정보가 없을 때 401에러로 변경 * feat(#153): user 정보 gist url 추가. erd 및 dto 수정 * feat(#156): lotus 정보에 해당하는 gist/commit url을 함께 주도록 추가 --- apps/backend/src/docker/docker.service.ts | 2 +- .../src/filter/typeorm.exception.filter.ts | 0 .../backend/src/lotus/dto/lotus.detail.dto.ts | 9 ++++- .../src/lotus/dto/lotus.response.dto.ts | 10 ++++- .../src/lotus/dto/simple.user.response.dto.ts | 9 ++++- apps/backend/src/lotus/lotus.service.ts | 40 +++++++++---------- apps/backend/src/main.ts | 2 +- apps/backend/src/user/dto/user.create.dto.ts | 4 ++ apps/backend/src/user/user.entity.ts | 3 ++ 9 files changed, 54 insertions(+), 25 deletions(-) rename "apps/backend/src/filter/\btypeorm.exception.filter.ts" => apps/backend/src/filter/typeorm.exception.filter.ts (100%) diff --git a/apps/backend/src/docker/docker.service.ts b/apps/backend/src/docker/docker.service.ts index bf85b5ef..23b1ed38 100644 --- a/apps/backend/src/docker/docker.service.ts +++ b/apps/backend/src/docker/docker.service.ts @@ -99,7 +99,7 @@ export class DockerService { }); stream.on('end', async () => { - // await container.remove({ force: true }); + await container.remove({ force: true }); let result = this.filterAnsiCode(output); if (inputs.length !== 0) { result = result.split('\n').slice(1).join('\n'); diff --git "a/apps/backend/src/filter/\btypeorm.exception.filter.ts" b/apps/backend/src/filter/typeorm.exception.filter.ts similarity index 100% rename from "apps/backend/src/filter/\btypeorm.exception.filter.ts" rename to apps/backend/src/filter/typeorm.exception.filter.ts diff --git a/apps/backend/src/lotus/dto/lotus.detail.dto.ts b/apps/backend/src/lotus/dto/lotus.detail.dto.ts index 04350ed8..8696e922 100644 --- a/apps/backend/src/lotus/dto/lotus.detail.dto.ts +++ b/apps/backend/src/lotus/dto/lotus.detail.dto.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { Type } from 'class-transformer'; -import { IsArray, IsBoolean, IsDate, IsString, ValidateNested } from 'class-validator'; +import { IsArray, IsBoolean, IsDate, IsString, IsUrl, ValidateNested } from 'class-validator'; import { SimpleFileResponseDto } from './simple.file.response.dto'; import { SimpleUserResponseDto } from './simple.user.response.dto'; import { GistApiFileListDto } from '@/gist/dto/gistApiFileList.dto'; @@ -43,6 +43,12 @@ export class LotusDetailDto { }) version: string; + @IsUrl() + @ApiProperty({ + example: 'https://gist.github.com/gistId~~/commitId~~' + }) + gistUrl: string; + @IsBoolean() @ApiProperty({ example: true @@ -73,6 +79,7 @@ export class LotusDetailDto { id: lotus.lotusId, title: lotus.title, language: lotus.language, + gistUrl: `https://gist.github.com/${lotus.gistRepositoryId}/${lotus.commitId}`, version: lotus.version, date: lotus.createdAt, isPublic: lotus.isPublic, diff --git a/apps/backend/src/lotus/dto/lotus.response.dto.ts b/apps/backend/src/lotus/dto/lotus.response.dto.ts index ca378e7e..4676961d 100644 --- a/apps/backend/src/lotus/dto/lotus.response.dto.ts +++ b/apps/backend/src/lotus/dto/lotus.response.dto.ts @@ -1,6 +1,6 @@ import { ApiProperty } from '@nestjs/swagger'; import { Type } from 'class-transformer'; -import { IsBoolean, IsDate, IsString, ValidateNested } from 'class-validator'; +import { IsBoolean, IsDate, IsString, IsUrl, ValidateNested } from 'class-validator'; import { SimpleUserResponseDto } from './simple.user.response.dto'; import { Lotus } from '@/lotus/lotus.entity'; @@ -29,6 +29,12 @@ export class LotusResponseDto { }) language: string; + @IsUrl() + @ApiProperty({ + example: 'https://gist.github.com/gistId~~/commitId~~' + }) + gistUrl: string; + @IsDate() @ApiProperty({ example: '로투스 생성 일시' @@ -54,6 +60,7 @@ export class LotusResponseDto { author: user, title: lotus.title, language: lotus.language, + gistUrl: `https://gist.github.com/${lotus.gistRepositoryId}/${lotus.commitId}`, isPublic: lotus.isPublic, date: lotus.createdAt, tags @@ -67,6 +74,7 @@ export class LotusResponseDto { id: lotus.lotusId, author: simpleUser, title: lotus.title, + gistUrl: `https://gist.github.com/${lotus.gistRepositoryId}/${lotus.commitId}`, language: lotus.language, isPublic: lotus.isPublic, date: lotus.createdAt, diff --git a/apps/backend/src/lotus/dto/simple.user.response.dto.ts b/apps/backend/src/lotus/dto/simple.user.response.dto.ts index 831db434..6e3e204d 100644 --- a/apps/backend/src/lotus/dto/simple.user.response.dto.ts +++ b/apps/backend/src/lotus/dto/simple.user.response.dto.ts @@ -21,11 +21,18 @@ export class SimpleUserResponseDto { }) profile: string; + @IsUrl() + @ApiProperty({ + example: 'https://gist.github.com/nickname' + }) + gistUrl: string; + static ofUserDto(userData: User) { return { id: userData.userId, nickname: userData.nickname, - profile: userData.profilePath + profile: userData.profilePath, + gistUrl: userData.gistUrl }; } } diff --git a/apps/backend/src/lotus/lotus.service.ts b/apps/backend/src/lotus/lotus.service.ts index 0e3cf26f..8732a305 100644 --- a/apps/backend/src/lotus/lotus.service.ts +++ b/apps/backend/src/lotus/lotus.service.ts @@ -132,9 +132,7 @@ export class LotusService { } async getPublicLotus(page: number, size: number, search: string): Promise { - const lotusData = await this.getLotusByTags(search); - - const totalNum = lotusData.length; + const [lotusData, totalNum] = await this.getLotusByTags(page, size, search); const maxPage = Math.ceil(totalNum / size); if (page > maxPage && maxPage !== 0) { throw new HttpException('page must be lower than max page', HttpStatus.NOT_FOUND); @@ -142,44 +140,49 @@ export class LotusService { if (page <= 0) { throw new HttpException('page must be higher than 0', HttpStatus.NOT_FOUND); } - const firstIdx = size * (page - 1); - const returnLotusData = lotusData.splice(firstIdx, size); - - return LotusPublicDto.ofLotusList(returnLotusData, page, maxPage); + return LotusPublicDto.ofLotusList(lotusData, page, maxPage); } - async getLotusByTags(search: string) { + async getLotusByTags(page: number, size: number, search: string) { if (!search) { - return await this.lotusRepository.find({ + return await this.lotusRepository.findAndCount({ where: { isPublic: true }, - relations: ['tags', 'user'] + skip: (page - 1) * size, + take: size, + relations: ['tags', 'user'], + order: { createdAt: 'DESC' } }); } const tags = await this.tagService.searchTag(search); - return await this.lotusRepository.find({ + return await this.lotusRepository.findAndCount({ where: { isPublic: true, tags: { tagId: In(tags) } }, - relations: ['tags', 'user'] + skip: (page - 1) * size, + take: size, + relations: ['tags', 'user'], + order: { createdAt: 'DESC' } }); } async getUserLotus(userId: string, page: number, size: number) { const user = this.userService.findOneByUserId(userId); if (!user) { - throw new HttpException('user data is not found', HttpStatus.NOT_FOUND); + throw new HttpException('user data is not found', HttpStatus.UNAUTHORIZED); } - const lotusData = await this.lotusRepository.find({ + const [lotusData, totalNum] = await this.lotusRepository.findAndCount({ where: { user: { userId } }, - relations: ['tags', 'user'] + skip: (page - 1) * size, + take: size, + relations: ['tags', 'user'], + order: { createdAt: 'DESC' } }); - const totalNum = lotusData.length; const maxPage = Math.ceil(totalNum / size); if (page > maxPage && maxPage !== 0) { throw new HttpException('page must be lower than max page', HttpStatus.NOT_FOUND); @@ -187,10 +190,7 @@ export class LotusService { if (page <= 0) { throw new HttpException('page must be higher than 0', HttpStatus.NOT_FOUND); } - const firstIdx = size * (page - 1); - const returnLotusData = lotusData.splice(firstIdx, size); - - return LotusPublicDto.ofLotusList(returnLotusData, page, maxPage); + return LotusPublicDto.ofLotusList(lotusData, page, maxPage); } async checkAlreadyExist(gistUuid: string, commitId: string) { diff --git a/apps/backend/src/main.ts b/apps/backend/src/main.ts index 9ba573d4..5479d20d 100644 --- a/apps/backend/src/main.ts +++ b/apps/backend/src/main.ts @@ -2,8 +2,8 @@ import { INestApplication, ValidationPipe } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { DocumentBuilder, SwaggerCustomOptions, SwaggerModule } from '@nestjs/swagger'; import { AppModule } from './app.module'; -import { typeOrmExceptionFilter } from './filter/\btypeorm.exception.filter'; import { httpExceptionFilter } from './filter/http.exception.filter'; +import { typeOrmExceptionFilter } from './filter/typeorm.exception.filter'; async function bootstrap() { const app: INestApplication = await NestFactory.create(AppModule); diff --git a/apps/backend/src/user/dto/user.create.dto.ts b/apps/backend/src/user/dto/user.create.dto.ts index cf52fc2f..7df0da94 100644 --- a/apps/backend/src/user/dto/user.create.dto.ts +++ b/apps/backend/src/user/dto/user.create.dto.ts @@ -19,6 +19,9 @@ export class UserCreateDto { @IsNumber() gitId: number; + @IsString() + gistUrl: string; + @ValidateNested({ each: true }) @Type(() => Lotus) lotuses: Lotus[]; @@ -32,6 +35,7 @@ export class UserCreateDto { this.profilePath = response.avatar_url; this.gitToken = accessToken; this.gitId = response.id; + this.gistUrl = `https://gist.github.com/${response.login}`; this.lotuses = []; this.comments = []; } diff --git a/apps/backend/src/user/user.entity.ts b/apps/backend/src/user/user.entity.ts index 80b1426e..cc4bca8a 100644 --- a/apps/backend/src/user/user.entity.ts +++ b/apps/backend/src/user/user.entity.ts @@ -17,6 +17,9 @@ export class User { @Column({ name: 'git_token' }) gitToken: string; + @Column({ name: 'gist_url' }) + gistUrl: string; + @Column({ name: 'git_id', unique: true }) gitId: number; From 5702b898d502a52e94ab1443fe60e7982f787143 Mon Sep 17 00:00:00 2001 From: ATeals <125727432+ATeals@users.noreply.github.com> Date: Tue, 26 Nov 2024 17:12:14 +0900 Subject: [PATCH 02/10] Feature #155 : History Pagination, History Pending Error (#158) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(#155): history 실행시 바로보여주고 아코디언 접을 수 없도록 수정 - 실행한 history가 바로보이도록 - pending ui - loading ui - error ui * refactor(#155): change lotus list page size 9 * refactor(#155): usePagination 스크롤 에니메이션 toggle option 추가 * style(#155): HistoryList 높이 기본값 * feat(#155): SuspensePagination - page 객체를 가진 모든 쿼리에서 사용할 수 있는 Pagination 컴포넌트 * feat(#155): lotus detail page history pagination --- apps/frontend/src/app/router/routeTree.gen.ts | 64 +++++++++---------- apps/frontend/src/feature/history/api.ts | 8 +-- apps/frontend/src/feature/lotus/api.ts | 2 +- .../page/(main)/lotus/$lotusId/index.lazy.tsx | 25 +++++++- .../src/page/(main)/lotus/$lotusId/index.tsx | 10 +++ .../src/shared/pagination/Pagination.tsx | 6 +- .../src/shared/pagination/usePagination.tsx | 6 +- .../src/widget/SuspensePagination.tsx | 33 ++++++++++ .../history/SuspenseLotusHistoryDetail.tsx | 56 ++++++++++++---- .../history/SuspenseLotusHistoryList.tsx | 24 +++++-- .../src/widget/lotusCodeRun/CodeRunButton.tsx | 3 +- .../widget/lotusCodeRun/LotusRunCodeForm.tsx | 2 - packages/react-markdown/src/github.css | 2 +- 13 files changed, 174 insertions(+), 67 deletions(-) create mode 100644 apps/frontend/src/page/(main)/lotus/$lotusId/index.tsx create mode 100644 apps/frontend/src/widget/SuspensePagination.tsx diff --git a/apps/frontend/src/app/router/routeTree.gen.ts b/apps/frontend/src/app/router/routeTree.gen.ts index 2dfab397..af409194 100644 --- a/apps/frontend/src/app/router/routeTree.gen.ts +++ b/apps/frontend/src/app/router/routeTree.gen.ts @@ -18,12 +18,12 @@ import { Route as LoginErrorIndexImport } from './../../page/login/error/index'; import { Route as mainUserIndexImport } from './../../page/(main)/user/index'; import { Route as mainLotusIndexImport } from './../../page/(main)/lotus/index'; import { Route as mainLotusCreateIndexImport } from './../../page/(main)/lotus/create/index'; +import { Route as mainLotusLotusIdIndexImport } from './../../page/(main)/lotus/$lotusId/index'; // Create Virtual Routes const mainRouteLazyImport = createFileRoute('/(main)')(); const IndexLazyImport = createFileRoute('/')(); -const mainLotusLotusIdIndexLazyImport = createFileRoute('/(main)/lotus/$lotusId/')(); // Create/Update Routes @@ -69,14 +69,6 @@ const mainLotusIndexRoute = mainLotusIndexImport } as any) .lazy(() => import('./../../page/(main)/lotus/index.lazy').then((d) => d.Route)); -const mainLotusLotusIdIndexLazyRoute = mainLotusLotusIdIndexLazyImport - .update({ - id: '/lotus/$lotusId/', - path: '/lotus/$lotusId/', - getParentRoute: () => mainRouteLazyRoute - } as any) - .lazy(() => import('./../../page/(main)/lotus/$lotusId/index.lazy').then((d) => d.Route)); - const mainLotusCreateIndexRoute = mainLotusCreateIndexImport .update({ id: '/lotus/create/', @@ -85,6 +77,14 @@ const mainLotusCreateIndexRoute = mainLotusCreateIndexImport } as any) .lazy(() => import('./../../page/(main)/lotus/create/index.lazy').then((d) => d.Route)); +const mainLotusLotusIdIndexRoute = mainLotusLotusIdIndexImport + .update({ + id: '/lotus/$lotusId/', + path: '/lotus/$lotusId/', + getParentRoute: () => mainRouteLazyRoute + } as any) + .lazy(() => import('./../../page/(main)/lotus/$lotusId/index.lazy').then((d) => d.Route)); + // Populate the FileRoutesByPath interface declare module '@tanstack/react-router' { @@ -131,6 +131,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof LoginSuccessIndexImport; parentRoute: typeof rootRoute; }; + '/(main)/lotus/$lotusId/': { + id: '/(main)/lotus/$lotusId/'; + path: '/lotus/$lotusId'; + fullPath: '/lotus/$lotusId'; + preLoaderRoute: typeof mainLotusLotusIdIndexImport; + parentRoute: typeof mainRouteLazyImport; + }; '/(main)/lotus/create/': { id: '/(main)/lotus/create/'; path: '/lotus/create'; @@ -138,13 +145,6 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof mainLotusCreateIndexImport; parentRoute: typeof mainRouteLazyImport; }; - '/(main)/lotus/$lotusId/': { - id: '/(main)/lotus/$lotusId/'; - path: '/lotus/$lotusId'; - fullPath: '/lotus/$lotusId'; - preLoaderRoute: typeof mainLotusLotusIdIndexLazyImport; - parentRoute: typeof mainRouteLazyImport; - }; } } @@ -153,15 +153,15 @@ declare module '@tanstack/react-router' { interface mainRouteLazyRouteChildren { mainLotusIndexRoute: typeof mainLotusIndexRoute; mainUserIndexRoute: typeof mainUserIndexRoute; + mainLotusLotusIdIndexRoute: typeof mainLotusLotusIdIndexRoute; mainLotusCreateIndexRoute: typeof mainLotusCreateIndexRoute; - mainLotusLotusIdIndexLazyRoute: typeof mainLotusLotusIdIndexLazyRoute; } const mainRouteLazyRouteChildren: mainRouteLazyRouteChildren = { mainLotusIndexRoute: mainLotusIndexRoute, mainUserIndexRoute: mainUserIndexRoute, - mainLotusCreateIndexRoute: mainLotusCreateIndexRoute, - mainLotusLotusIdIndexLazyRoute: mainLotusLotusIdIndexLazyRoute + mainLotusLotusIdIndexRoute: mainLotusLotusIdIndexRoute, + mainLotusCreateIndexRoute: mainLotusCreateIndexRoute }; const mainRouteLazyRouteWithChildren = mainRouteLazyRoute._addFileChildren(mainRouteLazyRouteChildren); @@ -172,8 +172,8 @@ export interface FileRoutesByFullPath { '/user': typeof mainUserIndexRoute; '/login/error': typeof LoginErrorIndexRoute; '/login/success': typeof LoginSuccessIndexRoute; + '/lotus/$lotusId': typeof mainLotusLotusIdIndexRoute; '/lotus/create': typeof mainLotusCreateIndexRoute; - '/lotus/$lotusId': typeof mainLotusLotusIdIndexLazyRoute; } export interface FileRoutesByTo { @@ -182,8 +182,8 @@ export interface FileRoutesByTo { '/user': typeof mainUserIndexRoute; '/login/error': typeof LoginErrorIndexRoute; '/login/success': typeof LoginSuccessIndexRoute; + '/lotus/$lotusId': typeof mainLotusLotusIdIndexRoute; '/lotus/create': typeof mainLotusCreateIndexRoute; - '/lotus/$lotusId': typeof mainLotusLotusIdIndexLazyRoute; } export interface FileRoutesById { @@ -194,15 +194,15 @@ export interface FileRoutesById { '/(main)/user/': typeof mainUserIndexRoute; '/login/error/': typeof LoginErrorIndexRoute; '/login/success/': typeof LoginSuccessIndexRoute; + '/(main)/lotus/$lotusId/': typeof mainLotusLotusIdIndexRoute; '/(main)/lotus/create/': typeof mainLotusCreateIndexRoute; - '/(main)/lotus/$lotusId/': typeof mainLotusLotusIdIndexLazyRoute; } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath; - fullPaths: '/' | '/lotus' | '/user' | '/login/error' | '/login/success' | '/lotus/create' | '/lotus/$lotusId'; + fullPaths: '/' | '/lotus' | '/user' | '/login/error' | '/login/success' | '/lotus/$lotusId' | '/lotus/create'; fileRoutesByTo: FileRoutesByTo; - to: '/' | '/lotus' | '/user' | '/login/error' | '/login/success' | '/lotus/create' | '/lotus/$lotusId'; + to: '/' | '/lotus' | '/user' | '/login/error' | '/login/success' | '/lotus/$lotusId' | '/lotus/create'; id: | '__root__' | '/' @@ -211,8 +211,8 @@ export interface FileRouteTypes { | '/(main)/user/' | '/login/error/' | '/login/success/' - | '/(main)/lotus/create/' - | '/(main)/lotus/$lotusId/'; + | '/(main)/lotus/$lotusId/' + | '/(main)/lotus/create/'; fileRoutesById: FileRoutesById; } @@ -252,8 +252,8 @@ export const routeTree = rootRoute._addFileChildren(rootRouteChildren)._addFileT "children": [ "/(main)/lotus/", "/(main)/user/", - "/(main)/lotus/create/", - "/(main)/lotus/$lotusId/" + "/(main)/lotus/$lotusId/", + "/(main)/lotus/create/" ] }, "/(main)/lotus/": { @@ -270,12 +270,12 @@ export const routeTree = rootRoute._addFileChildren(rootRouteChildren)._addFileT "/login/success/": { "filePath": "login/success/index.tsx" }, - "/(main)/lotus/create/": { - "filePath": "(main)/lotus/create/index.tsx", + "/(main)/lotus/$lotusId/": { + "filePath": "(main)/lotus/$lotusId/index.tsx", "parent": "/(main)" }, - "/(main)/lotus/$lotusId/": { - "filePath": "(main)/lotus/$lotusId/index.lazy.tsx", + "/(main)/lotus/create/": { + "filePath": "(main)/lotus/create/index.tsx", "parent": "/(main)" } } diff --git a/apps/frontend/src/feature/history/api.ts b/apps/frontend/src/feature/history/api.ts index e9f27837..4eeea5b5 100644 --- a/apps/frontend/src/feature/history/api.ts +++ b/apps/frontend/src/feature/history/api.ts @@ -2,16 +2,16 @@ import { HistoryType } from '.'; import { api } from '@/shared/common/api'; export const getLotusHistoryList = async ({ - id + id, + page = 1 }: { id: string; + page?: number; }): Promise<{ list: HistoryType[]; page: { current: number; max: number } }> => { - const response = await api.get(`/api/lotus/${id}/history`); + const response = await api.get(`/api/lotus/${id}/history?page=${page}&size=${5}`); const data = response.data as { list: HistoryType[]; page: { current: number; max: number } }; - console.log(data); - const body = { ...data, list: data.list.map(({ date, ...rest }) => ({ ...rest, date: new Date(date) })) diff --git a/apps/frontend/src/feature/lotus/api.ts b/apps/frontend/src/feature/lotus/api.ts index 162d8b6c..d6edd954 100644 --- a/apps/frontend/src/feature/lotus/api.ts +++ b/apps/frontend/src/feature/lotus/api.ts @@ -4,7 +4,7 @@ import { api } from '@/shared/common/api'; import { PageType } from '@/shared/pagination'; export const getLotusList = async ({ page = 1 }: { page?: number }) => { - const response = await api.get(`/api/lotus?page=${page}`); + const response = await api.get(`/api/lotus?page=${page}&size=9`); const lotuses: LotusType[] = response.data.lotuses.map((lotus: LotusType) => ({ ...lotus, diff --git a/apps/frontend/src/page/(main)/lotus/$lotusId/index.lazy.tsx b/apps/frontend/src/page/(main)/lotus/$lotusId/index.lazy.tsx index 05fa3c0a..55a04faa 100644 --- a/apps/frontend/src/page/(main)/lotus/$lotusId/index.lazy.tsx +++ b/apps/frontend/src/page/(main)/lotus/$lotusId/index.lazy.tsx @@ -1,9 +1,11 @@ -import { createLazyFileRoute } from '@tanstack/react-router'; +import { createLazyFileRoute, getRouteApi } from '@tanstack/react-router'; +import { lotusHistoryQueryOptions } from '@/feature/history/query'; import { AsyncBoundary } from '@/shared/boundary'; import { SuspenseLotusHistoryList } from '@/widget/history'; import { CodeRunButton } from '@/widget/lotusCodeRun'; import { SuspenseLotusDetail } from '@/widget/lotusDetail'; import { SuspenseLotusFiles } from '@/widget/lotusDetail/SuspenseLotusFiles'; +import { SuspensePagination } from '@/widget/SuspensePagination'; import '@/app/style/github.css'; @@ -11,8 +13,18 @@ export const Route = createLazyFileRoute('/(main)/lotus/$lotusId/')({ component: RouteComponent }); +const { useSearch, useNavigate, useParams } = getRouteApi('/(main)/lotus/$lotusId/'); + function RouteComponent() { - const { lotusId: id } = Route.useParams(); + const { lotusId: id } = useParams(); + + const { page = 1 } = useSearch(); + + const navigate = useNavigate(); + + const handleChangePage = (page: number) => { + navigate({ search: { page } }); + }; return (
@@ -27,7 +39,14 @@ function RouteComponent() { Loading...
} rejected={() =>
Error!
}> - + + + + Loading...} rejected={() =>
Error!
}> +
); diff --git a/apps/frontend/src/page/(main)/lotus/$lotusId/index.tsx b/apps/frontend/src/page/(main)/lotus/$lotusId/index.tsx new file mode 100644 index 00000000..cbed9f15 --- /dev/null +++ b/apps/frontend/src/page/(main)/lotus/$lotusId/index.tsx @@ -0,0 +1,10 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { z } from 'zod'; + +const historySearchPageValidate = z.object({ + page: z.number().default(1).optional() +}); + +export const Route = createFileRoute('/(main)/lotus/$lotusId/')({ + validateSearch: (search) => historySearchPageValidate.parse(search) +}); diff --git a/apps/frontend/src/shared/pagination/Pagination.tsx b/apps/frontend/src/shared/pagination/Pagination.tsx index 36e3859a..59a40c8c 100644 --- a/apps/frontend/src/shared/pagination/Pagination.tsx +++ b/apps/frontend/src/shared/pagination/Pagination.tsx @@ -15,13 +15,15 @@ interface PaginationProps { totalPages?: number; initialPage?: number; onChangePage?: (page: number) => void; + activeScrollTop?: true; } -export function Pagination({ totalPages = 1, initialPage = 1, onChangePage }: PaginationProps) { +export function Pagination({ totalPages = 1, initialPage = 1, onChangePage, activeScrollTop }: PaginationProps) { const { currentPage, onClickPage, onClickPrevious, onClickNext, getPaginationItems } = usePagination({ totalPages, initialPage, - onChangePage + onChangePage, + activeScrollTop }); return ( diff --git a/apps/frontend/src/shared/pagination/usePagination.tsx b/apps/frontend/src/shared/pagination/usePagination.tsx index 1be14e19..10bf291c 100644 --- a/apps/frontend/src/shared/pagination/usePagination.tsx +++ b/apps/frontend/src/shared/pagination/usePagination.tsx @@ -4,15 +4,17 @@ interface UsePaginationProps { totalPages: number; initialPage?: number; onChangePage?: (page: number) => void; + activeScrollTop?: true; } -export function usePagination({ totalPages, initialPage = 1, onChangePage }: UsePaginationProps) { +export function usePagination({ totalPages, initialPage = 1, onChangePage, activeScrollTop }: UsePaginationProps) { const [currentPage, setCurrentPage] = useState(initialPage); const onClickPage = (page: number) => { setCurrentPage(page); onChangePage?.(page); - window.scrollTo({ top: 0, behavior: 'smooth' }); + + if (activeScrollTop) window.scrollTo({ top: 0, behavior: 'smooth' }); }; const onClickPrevious = () => { diff --git a/apps/frontend/src/widget/SuspensePagination.tsx b/apps/frontend/src/widget/SuspensePagination.tsx new file mode 100644 index 00000000..30eca5d5 --- /dev/null +++ b/apps/frontend/src/widget/SuspensePagination.tsx @@ -0,0 +1,33 @@ +import { useSuspenseQuery } from '@tanstack/react-query'; +import { Pagination } from '@/shared/pagination'; + +interface Page { + max: number; + current: number; +} + +interface PaginationQueryOptions { + queryKey: Record[]; + queryFn: (...args: any[]) => Promise<{ page: Page }>; +} + +interface SuspensePaginationProps { + queryOptions: PaginationQueryOptions; + onChangePage: (page: number) => void; + activeScrollTop?: true; +} + +export function SuspensePagination({ queryOptions, onChangePage, activeScrollTop }: SuspensePaginationProps) { + const { data } = useSuspenseQuery(queryOptions); + + return ( + + ); +} + +SuspensePagination.Skeleton = Pagination.Skeleton; diff --git a/apps/frontend/src/widget/history/SuspenseLotusHistoryDetail.tsx b/apps/frontend/src/widget/history/SuspenseLotusHistoryDetail.tsx index 0fe89bb5..119adfb9 100644 --- a/apps/frontend/src/widget/history/SuspenseLotusHistoryDetail.tsx +++ b/apps/frontend/src/widget/history/SuspenseLotusHistoryDetail.tsx @@ -1,8 +1,8 @@ import { useEffect } from 'react'; -import { Text } from '@froxy/design/components'; +import { Button, Heading } from '@froxy/design/components'; import { Markdown } from '@froxy/react-markdown'; -import { useQueryClient, useSuspenseQuery } from '@tanstack/react-query'; -import { HistoryType } from '@/feature/history'; +import { useQueryClient, useQueryErrorResetBoundary, useSuspenseQuery } from '@tanstack/react-query'; +import { AiOutlineLoading } from 'react-icons/ai'; import { lotusHistoryQueryOptions } from '@/feature/history/query'; export function SuspenseLotusHistoryDetail({ lotusId, historyId }: { lotusId: string; historyId: string }) { @@ -17,9 +17,7 @@ export function SuspenseLotusHistoryDetail({ lotusId, historyId }: { lotusId: st if (data.status !== 'PENDING') return; const interval = setInterval(async () => { - await queryClient.refetchQueries(lotusDetailQueryOptions); - - const updatedData = queryClient.getQueryData(lotusDetailQueryOptions.queryKey); + const updatedData = await queryClient.fetchQuery(lotusDetailQueryOptions); if (!updatedData || updatedData.status === 'PENDING') return; @@ -32,15 +30,49 @@ export function SuspenseLotusHistoryDetail({ lotusId, historyId }: { lotusId: st const terminal = '```bash\n' + data.output + '\n```'; if (data.status === 'PENDING') { - return ( -
- PENDING... -
- ); + return ; } + return ( -
+
); } + +function LotusHistoryDetailFallback({ title }: { title: string }) { + return ( +
+ + {title} +
+ ); +} + +SuspenseLotusHistoryDetail.Fallback = LotusHistoryDetailFallback; + +function LotusHistoryDetailError({ retry }: { retry?: () => void }) { + const { reset } = useQueryErrorResetBoundary(); + + const handleClick = () => { + reset(); + retry?.(); + }; + + return ( +
+
+ + OOPS +
+ + {retry && ( + + )} +
+ ); +} + +SuspenseLotusHistoryDetail.Error = LotusHistoryDetailError; diff --git a/apps/frontend/src/widget/history/SuspenseLotusHistoryList.tsx b/apps/frontend/src/widget/history/SuspenseLotusHistoryList.tsx index 3695cc07..b4d829d5 100644 --- a/apps/frontend/src/widget/history/SuspenseLotusHistoryList.tsx +++ b/apps/frontend/src/widget/history/SuspenseLotusHistoryList.tsx @@ -5,27 +5,37 @@ import { SuspenseLotusHistoryDetail } from './SuspenseLotusHistoryDetail'; import { lotusHistoryQueryOptions } from '@/feature/history/query'; import { AsyncBoundary } from '@/shared/boundary'; -export function SuspenseLotusHistoryList({ id }: { id: string }) { +export function SuspenseLotusHistoryList({ id, page = 1 }: { id: string; page?: number }) { const { data: { list } - } = useSuspenseQuery(lotusHistoryQueryOptions.list({ id })); + } = useSuspenseQuery(lotusHistoryQueryOptions.list({ id, page })); - const firstPendingIndex = list.findIndex((history) => history.status === 'PENDING'); + const pendingHistoriesId = list.filter((history) => history.status === 'PENDING').map((history) => history.id); + + const firstPageFirstItem = page === 1 ? [list[0].id] : []; return ( -
- +
+ {/* NOTE : key를 이용해 갱신해야 Pending 상태인 Content 고정 가능 */} + {list.map((history) => ( - + - Loading...
} rejected={() =>
Error!!
}> + } + rejected={({ retry }) => } + > diff --git a/apps/frontend/src/widget/lotusCodeRun/CodeRunButton.tsx b/apps/frontend/src/widget/lotusCodeRun/CodeRunButton.tsx index 25b9412f..dea6a44d 100644 --- a/apps/frontend/src/widget/lotusCodeRun/CodeRunButton.tsx +++ b/apps/frontend/src/widget/lotusCodeRun/CodeRunButton.tsx @@ -22,8 +22,9 @@ export function CodeRunButton({ lotusId }: { lotusId: string }) { { lotusId, input: inputs, execFileName }, { onSuccess: () => { - queryClient.invalidateQueries(lotusHistoryQueryOptions.list({ id: lotusId })); toast({ description: '코드가 실행되었습니다.', variant: 'success', duration: 2000 }); + + queryClient.invalidateQueries(lotusHistoryQueryOptions.list({ id: lotusId })); }, onError: () => { toast({ diff --git a/apps/frontend/src/widget/lotusCodeRun/LotusRunCodeForm.tsx b/apps/frontend/src/widget/lotusCodeRun/LotusRunCodeForm.tsx index 48aa722e..0b2a692d 100644 --- a/apps/frontend/src/widget/lotusCodeRun/LotusRunCodeForm.tsx +++ b/apps/frontend/src/widget/lotusCodeRun/LotusRunCodeForm.tsx @@ -15,8 +15,6 @@ export function LotusRunCodeForm({ lotusId, onCancel, onSubmit }: LotusRunCodeFo const [inputs, setInputs] = useState([]); const handleSubmit = () => { - console.log(execFileName, inputs); - onSubmit?.({ execFileName, inputs }); }; diff --git a/packages/react-markdown/src/github.css b/packages/react-markdown/src/github.css index 88fc2381..7d39d0d3 100644 --- a/packages/react-markdown/src/github.css +++ b/packages/react-markdown/src/github.css @@ -152,5 +152,5 @@ code span[data-highlighted-line-id='rm'] { } .terminal code > [data-line]::before { - content: '>'; + content: '❯'; } From db55a8e9d96da3e1bb865742ccba98954be2f6cc Mon Sep 17 00:00:00 2001 From: ATeals <125727432+ATeals@users.noreply.github.com> Date: Tue, 26 Nov 2024 17:15:59 +0900 Subject: [PATCH 03/10] Feature #145 LotusMutationErrorToast (#154) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor(#145): 메인페이지 page size 9개로 수정 * style(#145): toast 본문 크기에 맞게 스타일 수정 * feat(#145): getLotusMutationErrorToastData lotus mutation시 발생하는 toast인터페이스 유틸 * refactor(#145): use getLotusMutationErrorToastData * fix(#145): AxiosErrorToastData에 없는 error default 처리 * fix(#145): 직관적인 네이밍으로 변경 --- apps/frontend/src/feature/lotus/api.ts | 2 +- apps/frontend/src/feature/lotus/index.ts | 1 + apps/frontend/src/feature/lotus/util.ts | 39 +++++++++++++++++++ apps/frontend/src/shared/toast/Toast.tsx | 4 +- .../widget/lotusCreate/LotusCreateForm.tsx | 7 ++-- .../frontend/src/widget/lotusDelete/index.tsx | 7 ++-- .../widget/lotusUpdate/LotusUpdateButton.tsx | 7 ++-- 7 files changed, 52 insertions(+), 15 deletions(-) create mode 100644 apps/frontend/src/feature/lotus/util.ts diff --git a/apps/frontend/src/feature/lotus/api.ts b/apps/frontend/src/feature/lotus/api.ts index d6edd954..48d4d09c 100644 --- a/apps/frontend/src/feature/lotus/api.ts +++ b/apps/frontend/src/feature/lotus/api.ts @@ -4,7 +4,7 @@ import { api } from '@/shared/common/api'; import { PageType } from '@/shared/pagination'; export const getLotusList = async ({ page = 1 }: { page?: number }) => { - const response = await api.get(`/api/lotus?page=${page}&size=9`); + const response = await api.get(`/api/lotus?page=${page}&size=${9}`); const lotuses: LotusType[] = response.data.lotuses.map((lotus: LotusType) => ({ ...lotus, diff --git a/apps/frontend/src/feature/lotus/index.ts b/apps/frontend/src/feature/lotus/index.ts index 9954ca3a..846f8766 100644 --- a/apps/frontend/src/feature/lotus/index.ts +++ b/apps/frontend/src/feature/lotus/index.ts @@ -3,3 +3,4 @@ export * from './hook'; export * from './component'; export * from './type'; export * from './api'; +export * from './util'; diff --git a/apps/frontend/src/feature/lotus/util.ts b/apps/frontend/src/feature/lotus/util.ts new file mode 100644 index 00000000..a3b7e932 --- /dev/null +++ b/apps/frontend/src/feature/lotus/util.ts @@ -0,0 +1,39 @@ +import { AxiosError } from 'axios'; + +export const AxiosErrorToastData = { + ['DEFAULT']: { + description: '오류가 발생했습니다. 다시 시도해 주세요.', + variant: 'error' + }, + [400]: { + description: '잘못된 요청입니다', + variant: 'error' + }, + [403]: { + description: '권한이 없습니다.', + variant: 'error' + }, + [404]: { + description: '존재하지 않는 Lotus입니다.', + variant: 'error' + }, + [409]: { + title: '이미 생성된 Lotus가 존재합니다.', + description: '중복된 Gist commit으로 생성할 수 없습니다.', + variant: 'error' + } +} as const; + +export const getLotusMutationErrorToastData = (error?: unknown) => { + const isAxiosError = error instanceof AxiosError; + + if (!isAxiosError) return AxiosErrorToastData['DEFAULT']; + + const inErrorToastData = error.status && error.status in AxiosErrorToastData; + + if (!inErrorToastData) return AxiosErrorToastData['DEFAULT']; + + const status = error.status || 'DEFAULT'; + + return AxiosErrorToastData[status as keyof typeof AxiosErrorToastData]; +}; diff --git a/apps/frontend/src/shared/toast/Toast.tsx b/apps/frontend/src/shared/toast/Toast.tsx index 8c19baa5..28a2ee98 100644 --- a/apps/frontend/src/shared/toast/Toast.tsx +++ b/apps/frontend/src/shared/toast/Toast.tsx @@ -52,7 +52,7 @@ export function Toast({ {duration !== Infinity && ( -
+
{ + onError: (error) => { toast({ - description: 'Lotus 생성 중 오류가 발생했습니다. 다시 시도해 주세요.', - variant: 'error', + ...getLotusMutationErrorToastData(error), duration: 2000 }); } diff --git a/apps/frontend/src/widget/lotusDelete/index.tsx b/apps/frontend/src/widget/lotusDelete/index.tsx index 29c06419..476e0db8 100644 --- a/apps/frontend/src/widget/lotusDelete/index.tsx +++ b/apps/frontend/src/widget/lotusDelete/index.tsx @@ -1,7 +1,7 @@ import { Button, Heading, Text } from '@froxy/design/components'; import { useNavigate } from '@tanstack/react-router'; import { RiDeleteBin5Fill } from 'react-icons/ri'; -import { useLotusDeleteMutation } from '@/feature/lotus'; +import { getLotusMutationErrorToastData, useLotusDeleteMutation } from '@/feature/lotus'; import { ModalBox } from '@/shared'; import { useOverlay } from '@/shared/overlay'; import { useToast } from '@/shared/toast'; @@ -25,10 +25,9 @@ export function LotusDeleteButton({ lotusId }: { lotusId: string }) { navigate({ to: '/lotus' }); }, - onError: () => { + onError: (error) => { toast({ - description: 'Lotus 삭제 중 오류가 발생했습니다. 다시 시도해 주세요.', - variant: 'error', + ...getLotusMutationErrorToastData(error), duration: 2000 }); } diff --git a/apps/frontend/src/widget/lotusUpdate/LotusUpdateButton.tsx b/apps/frontend/src/widget/lotusUpdate/LotusUpdateButton.tsx index 736f11b1..a0860590 100644 --- a/apps/frontend/src/widget/lotusUpdate/LotusUpdateButton.tsx +++ b/apps/frontend/src/widget/lotusUpdate/LotusUpdateButton.tsx @@ -2,7 +2,7 @@ import { Button, Text } from '@froxy/design/components'; import { useQueryClient } from '@tanstack/react-query'; import { IoSettingsSharp } from 'react-icons/io5'; import { LotusUpdateForm } from './LotusUpdateForm'; -import { lotusQueryOptions, useLotusUpdateMutation } from '@/feature/lotus'; +import { getLotusMutationErrorToastData, lotusQueryOptions, useLotusUpdateMutation } from '@/feature/lotus'; import { ModalBox } from '@/shared'; import { useOverlay } from '@/shared/overlay'; import { useToast } from '@/shared/toast'; @@ -26,10 +26,9 @@ export function LotusUpdateButton({ lotusId }: { lotusId: string }) { toast({ description: 'Lotus가 수정되었습니다.', variant: 'success', duration: 2000 }); }, - onError: () => { + onError: (error) => { toast({ - description: 'Lotus 수정 중 오류가 발생했습니다. 다시 시도해 주세요.', - variant: 'error', + ...getLotusMutationErrorToastData(error), duration: 2000 }); } From aa0bb1b130a778541685a1d2c6fc62ae25387ddc Mon Sep 17 00:00:00 2001 From: ATeals <125727432+ATeals@users.noreply.github.com> Date: Tue, 26 Nov 2024 20:19:25 +0900 Subject: [PATCH 04/10] =?UTF-8?q?Feature=20#159=20SuspensePagination=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD,=20=EA=B2=80=EC=83=89=20api=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=20=ED=94=84=EB=A1=A0=ED=8A=B8=EC=97=94=EB=93=9C=20?= =?UTF-8?q?=ED=99=98=EA=B2=BD=20=EC=88=98=EC=A0=95=20(#160)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor(#159): use SuspensePagination * refactor(#159): change userLotusList page size 6 * fix(#159): header userQueryOptions.info fetch retry none * chore(#159): 프론트엔드 테스트용 docker 설정 변경 + mysql 데이터 패키지에 저장 * chore(#159): favicon 추가 * feat(#159): lotus list 검색 query 추가 * refactor(#159): LotusFiles 기본 파일 설정 --- .gitignore | 4 +++ apps/frontend/index.html | 2 +- .../public/android-chrome-192x192.png | Bin 0 -> 51260 bytes .../public/android-chrome-512x512.png | Bin 0 -> 210889 bytes apps/frontend/public/apple-touch-icon.png | Bin 0 -> 46337 bytes apps/frontend/public/favicon-16x16.png | Bin 0 -> 930 bytes apps/frontend/public/favicon-32x32.png | Bin 0 -> 2833 bytes apps/frontend/public/favicon.ico | Bin 0 -> 15406 bytes apps/frontend/public/site.webmanifest | 1 + apps/frontend/src/feature/lotus/api.ts | 4 +-- apps/frontend/src/feature/lotus/hook.ts | 27 ---------------- apps/frontend/src/feature/lotus/index.ts | 1 - apps/frontend/src/feature/user/api.ts | 2 +- .../src/page/(main)/lotus/index.lazy.tsx | 18 +++++++---- apps/frontend/src/page/(main)/lotus/index.tsx | 3 +- .../src/page/(main)/user/index.lazy.tsx | 12 ++++--- apps/frontend/src/widget/Header.tsx | 5 ++- .../widget/lotusDetail/SuspenseLotusFiles.tsx | 6 +++- .../src/widget/lotusList/LotusSearchBar.tsx | 30 ++++++++++++------ .../lotusList/SuspenseLotusPagination.tsx | 19 ----------- docker-compose.yml | 6 ++-- 21 files changed, 62 insertions(+), 78 deletions(-) create mode 100644 apps/frontend/public/android-chrome-192x192.png create mode 100644 apps/frontend/public/android-chrome-512x512.png create mode 100644 apps/frontend/public/apple-touch-icon.png create mode 100644 apps/frontend/public/favicon-16x16.png create mode 100644 apps/frontend/public/favicon-32x32.png create mode 100644 apps/frontend/public/favicon.ico create mode 100644 apps/frontend/public/site.webmanifest delete mode 100644 apps/frontend/src/feature/lotus/hook.ts delete mode 100644 apps/frontend/src/widget/lotusList/SuspenseLotusPagination.tsx diff --git a/.gitignore b/.gitignore index 5c5058d7..da035b4d 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,7 @@ yarn-error.log* # Misc .DS_Store *.pem + + +#docker +mysql-data/* \ No newline at end of file diff --git a/apps/frontend/index.html b/apps/frontend/index.html index 9c73213c..30b9c00b 100644 --- a/apps/frontend/index.html +++ b/apps/frontend/index.html @@ -2,7 +2,7 @@ - + Froxy diff --git a/apps/frontend/public/android-chrome-192x192.png b/apps/frontend/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..a57301a2de1a4d517a246b29bc452c18e6e3a5a7 GIT binary patch literal 51260 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 ZA>;!}KF;Xi-5`MeUOaoH^i9D$?0!- literal 0 HcmV?d00001 diff --git a/apps/frontend/public/apple-touch-icon.png b/apps/frontend/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..42f9e079b106f20a8e4b5600fa0f991805002f8b GIT binary patch literal 46337 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%0DYqOa4gLfO{#_{F`E*= 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 Z{|Ppgda#sHY*zpP002ovPDHLkV1gq-BQF2| literal 0 HcmV?d00001 diff --git a/apps/frontend/public/favicon-16x16.png b/apps/frontend/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..c96c3be4628a4e1b987deef68fc0dcb8940b4e7b GIT binary patch literal 930 zcmV;T16}-yP)Px&TuDShR5(vfQh7{NM;QNo^A6a;uA4|rt=n9Cgi+HqI2t{hOq$Jct?GYu! z1A7<&EmTX;5K-_BZMDQUJ^nB@HCTj1yOsnJ72OpyY7}FumMX5GmIC`=-%K;lv^tYX zCNuN>u5Snc?614y5N5TBlM;)VLdqZa@BPAv9pi?X3J6jZc1sX)lU__L6cFrg|AU`2 zo2_cd-!(v~OH%dF1HEN;`IZHRxw#-Boak)Fnq766l9d3#2)8fvVb8iM6l7-u1RVR# zkM+CjPrG#2B67@2d!x8$dF$qq)vR# zW7IHksHz4H-yIfB$B!10eNIOCm!H?v69nGdRta!{rq8w^!#fQ-y1#}74IgE^i@VqU z!qP2efB+7CS_7v&7VmGZ+)U27(^piiTK!E?Za(rpTnXYFry9RUpW2UaZ~P2qGQ5+r z5N`ElKWPBW_zW5RT^BvgKxNjBN=cMmU&r7d3vata%&>;lCb&mSrVT6o95C~3v z0?Iwbu$dZ6&H)`*R#$;Dr+fC0WB&Bu!cTmj`1m+vPI7~hf{UT67&3<;K;Q%r2VylF zX1d%^NyWv7SJBrWLfih1Zi>s#d{nT(=Ok4HBMt(CAObO232+HR)&|0iK$rr=75Lennf=k%Jtt6Ps5Zm*mh0y zp1D&s+}TrSy~xSQQP1(mdsDngYiBK(!jvdxVaRS+XhI5+%mTra*G2ES+XttOXdedx zf${$-ERe{PQkzq+c4sBKlBOoW=CFYy0%O>~z3UIr+x7ckI25j(Z0HAMu_S*^<5R6J z-|XZOZhQdnH*HbsD>AroBXWy4S~Zn^7;L}v=QCfxztF@_c0#=bVgLXD07*qoM6N<$ Ef@qwmaR2}S literal 0 HcmV?d00001 diff --git a/apps/frontend/public/favicon-32x32.png b/apps/frontend/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..6401c30e1271a58b8addd318a5f9b09b8535bf09 GIT binary patch literal 2833 zcmV+s3-0uZP)Px<%Sl8*R9HuyS9x$%)gAuM-QJqyg^(Sx03k@TU=m0SiyUx4+fNmJf@yxjP1;Ju#h~MxE$Ra{GL<4MQ)1PSXrZ1VIuS1VVO3Si?VTJ#wlU z01c%jgZU{Xk&}M%kYCeQ3!;=UGC5UBPDq46C|Ww&P}kU?s{yUSB1@lAKOLuO+Gql5 zGe8I-)GH}st4L{`svA>8SxFm{Izk#A6Aua(5b?sTKet#=2G&MpJM1)6Lp;#3dAPA@d z4D<}Z@CR_u@DwbaSB5EhxrlN_@H{Mo!O) zxzXd@HF8)=!MiW7L4HOCuiRivQ362#D5bdAa24~)SK)`wCKNw077_77Kn;ri+islR za}f!047M(R4Vh_a5D55sN&!(IV9~z0cmWH_UqO9aOHHieeDwN}${P#-iM%hf%uBVm zx2$+WdGeu|05nv8e*xPM?uQx(;F0@_QIs=SJf#T!fQmVr%JGBRgmDvw zgF--0yBjfNDAqmp0>W%o9Ivjz)2}Q?Yu7E#P-KJ?8<(!Y?CCSn-gOHlOMZ=Q-KriNS94^Ek!{^6@{!fFxl^z!HN$?*dK0S_Qhiqgqb@!=oV!fH{lx$-mY zZaRXPm~g-#2)GU0mynIcc~5~-9gA0&2f0`E%xke|PEI+LGd_DSs<}gVQu?@gf|qtzrYn7ZaUgYF+_8|Klb&>=tal{3UiZ zAA%%`Ae6xH1Cxj4VL`@Y&~yz?zqA~mpD+tx7cqc|nYq}vX)A0N31#Ig@%Jxxw`M1g z$|AX?x%SKL{!OGkTmCw{wb4UU|t0@Lr5>|Ct--6|wRN8z^Ght)NI zL5IJCD;CWm!ixek@;Dx{ZOAT zoSi4cqz#2EE65m{ib)B%h_wv`tF6=5jmp+@sO!1{KMjB|DF=(Eg8f0yMxYCL#g(mnbRICoh~08wFw0!U$n>QD)G9L$pDl5(YF6)F5y|2>Lrc zsMvf0B9ZqIXFj5bGmAA_W7;))o~eN6 z4$i&-%BG0lX2{uE7J$I-4q*T06YzVqI^rnEY8{dk5m!7v4}v1{-IuL0d(4c4eKrR= zL_OinV)$hG9@B`1CS+? z0Tz&LKtTqGA)@_CJBT8|5ozOQB`FdhiF}iyI)$Mb&;uGg{a)UV$W#{$ssp;gfth+W zwG;4aIQZ@#EB=;DHzeV&0GSyM(iGG~n7 zfw^eJpwqAe30HZL=9>Xv?&HSBSc zR5B^Dt9#&BSezqk`urRSPT5pF`)661fOyh7m#Kc{lje!Xbj+X+geHg=VonOX%?ydf z^YnVL|Ia7k?^kPL6Jn`iuq7cc2v*H4_|BPnkRG0vqhi&YK^QD{E_8Q!aPWgF___zajdof~nhw;o4xWmK z6y^W4U-xZEy(c!Z@R6|~cF7#CkibJ62eYykn7a7S>+W{3r$k=4rs}Bt;yfD9-|TlN zN?FgbZ$BM86|)ezWo7c^OEoY1Xkc09_#`D~#u!kAz+m3W`pg6uWW-E8iJj< z-Cg4rv`Mxnm<+Lm!LwVCFmB$2(Jnw$HPjxyg3FanIy7VZ5SwkujlwEEiLuiQ zV|snw*EOooO-vo4z$%u##yQBP|1v94$bwCUP z>F@HOp|%C}H7!v4)Z2<6zGJtj>uwyrG+6onWFT~d{a(1<=_pnM{^c6<30AvgjUML0 z@KJFXniK`AU4bBr{Fr5E8dRT(-ZnR`U+O?-b2mJ_9-j#EjZKu_bcJ~i)>qW?p8x0d zqYT{rP~x-+QGL2r8qn0AYlfZ$N+LuNlFh2XVwGVK0z=o~b^D>Kx+W0PBZ}m#RS>pW zWZV9``~80b2reSIrKPqOPkXjc(+Uit=Ms&kP--|S5vU+g4-rYd46#O$m9JAGlIkjV j?C{1lKIhG@bP^>00000NkvXXu0mjfe5FHT literal 0 HcmV?d00001 diff --git a/apps/frontend/public/favicon.ico b/apps/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d494de19c215ae6f1b5635bb9ea6aec2e75f00a9 GIT binary patch literal 15406 zcmeHucYM^<(sv+j(-R;RMFAykv)SxslWb2m6+%d8326`lfzT7uLn4SMmTSAB&qYM^ zqDWB?q^Pt=6{U(Os3=W(O-LgNWZv(b-)=;o_ukjfd++`0dGh(pXE(dQbI#11Idf*_ zJ8Ngx#m?T&+uIJW{q3eW*x5ze+1d5)Fa00rV`ujcK2xcz-}~Fyed%jw7l>yt1S6!+ z@$#qsBBHuIqBO~B6eihTRh-WSb%M`@kSO=vAx4iXrKMZne>923VsTKLTne>AyWLEi zZ=e~gM^pJ{CkP^6elo#x|b+=kcIz<4HfNcfBIE z=i_RF+w)^yj+1!&0^fm$@*Vl02~^4Bw?iIKDdsD~+T!!te9C%0nv^E@XF`phM+!g5 z5j<9WF@dV_TuO)44y}(W3T7dPNx;$y-TaVUq(;v zoF(RBS%v;F_uO4GX~prS^x=2QXdb?wzB-+hM)#u%t;b(7YxH!X{ybf)ze(5XZqSwH zYxL~ia!IGq`7?Wp=~ClGx?X>auHL>*SDUU=?woj*|CJD(citQCETEsx{y@f|eMvv$ z5&HSe547*s9k7M5RK9f_?Kr)Wem;MSOhfyTcF@E0^Digp-BquX%IrExsr4vZw|O~z zy!itP&~+jI$S$<{lcn_Sg@ZJ6QyP_Q%A&*Pzod;@R*UcaBf8MawM%H@){h8hq$XJJ zIcUL4v+myj-!o^Arpcwl=+ccV^wz3pXu`6=G-F*FE#34N;_s(drqRS%$#n7BMSA+B z;tpk$N2)ws?xc$L-MV(;`*gdhf$EwYY5msKq#NWz!{=ye#FLQ}ncR!kf4V|^f4jMX z)@*){v~k^bBqa@WW*ZKS^XM)&db}Ao!vA`FTHvi$))QdS)l$vnDc1shzK z#N+$85q>y>vc-`Y!(;!|KlU^IK^74Er+@LUOG=8yH8QTJJ}la^IMm|4Txs&yt1!BM zqcpi44TsnNl(|ih-Lr9MR|B++{4|&EFO8-)7l_|!wtFKpSA>XE}^|9@HF{g1GC4ptgvyMm1l zEujhS6g_?bWh{uIY44AuS!=VYbi){$wIQ2ke4I%ID@IcGD{&NG5I|vryHTKC))J(5 z+od%1NEv9ghd;}UWq5yYO|{v@-JvC+H2s6oR8>2Ps=i=?4**qufwK?4Cw#H+ zr|jSIY5IqwDYYho)PsE}*x+_sY4Uj{@K5T(kl3rII!d-wX?AF}LE`K2WscU{C$ISh(g3cmkw z2FpP<*{XO>#4qLBa>ZR*3Og@D9Kmrw31SuIp`6Lex3ERbQwd6%sUU^k`HnuOSDf15 z^}Iqa>&Ra`3}aYd56HfA0?mf))L`A>H90h4aVq64N~ZCDOQs2bOQO6t5^3D)36#4q zfyTZT590TOY0|P$kO4eneECk+mBa_fU{#1?@?IZ=^TN` zh3MRvXHrGEAwKaSb(AM*q9qE8_8=xzw7Ymlf$xe|jizd>U&-?GT#%h@iS3|dV-6v{ zBc;LfXo%MRqABAMnuVCWjMo+<@ya}~kFSQ#@)xDhlu5+w#LtK%v^$bO15IIE#Sc#A2Scdi0d_jx>Kmx{reED$EQk*Crw|K z1)q;O@LU;>*;YVv5D(AWSxi;iCSyE*#xh|IoMUk&S+C-}u>XOs`F}op%>TB0dZMOT}VpKO$n>{xxwLZ@VYF+P-c{Lt>KO4`EqeX{bqyv}t z)9Jd?bf)es9lmmqmL6S*^F9SKS$(i|f7nLYzesk&_BD|f9eIfkUiy;G-abR;>(0?P zSC7#9#}-r7_5$c4kFs8{P_Rzc5oYpvAG~LHF-bL;GE-J-?l1*G?7wiDl*ewXM%~Q;pcihmD<&h2Xum$$B@YPmd#s61f{Z%KIP*Z!07+=@YNJmZ_qOZRFl5QeDX$23>_u6R5 z+7}UzIK%dxPia#Xy*OVD)p@?F9n_1y{ox4Kxlb3aU!ob+85Ev?*fOCf6_lmX0O^*5bZK}DZuz!u@Nw}Ow2*|hTLA~CiB^Uo+9g)tZh-UWqsrOfeWYCs;%96PXVmANW0G5aO~6sYJhwV_)bz1$qJ>bSI<*B^uPN+EkzG~gaWl)g&rakd(vmM>jm%iElpJV;&4h^5JJV< zU<2F6(B$RGRP(`j$X6%E@413@NHoYhIi1+Z|@%{Al%f&SJ`RTNC{}yU$ZH4{bquPBNDIv2Lje1T?#jyJl z?El2~hfs2voVM;>(>eaDqkHM87YnIo!DQOHYXipL6??a4!+TiUr9IT_S-*f*UuoUeRWu|^NpeG1jCZ1llpbVEe~3)!y-7Qa^FJAE#)$@{ zh0@xM@6p-I7~j%Bw?JpGuPabHNJz>QaeVw=@1_9*FF^$c;Wp{#w_ga)Wz& zGVGzCG?gZm4X2b`4d!>b7pS*Cg*@{axmLC*K;!t6zsBj;0FA>1|8U1sK?axIfqM5h z{Ue=DD4^feF>0Dzl1dXxQYbk`1)a;<6?%tbsBI+wacy4T`qxE0q)$J2lvh=-!DU~N z&gB~DMu^$vh}`VDKx641n4X?)uR*Rde7MS6n>4U5lO@mM&Ax=|b>VS6A5$1ztAq5i zeSwj(Ye5lCH-h!Dg9?LdjUl#AKdkdRxor#oPkrS&2}-nfd7ytoodmP|x4$l&;}}x| zJk+t?{la6rM`{y#j#0<@Jg18GS)nw0eWo;d)rLlSZdX}6KMjrbS*c3sz94+?Lz$5Y zkA!QJ9`4J2n&AyFt&DPA6Kr(;F4*9BMXqvpTWM%qj~I2*Kwq{|u>BvkK|ag+ zL4CVL#&sW#^R`4`ayk}du&)a=*tg*f-w!e%Z?L$MCaF6a)A~|W_5g|+)1S;)kC1+3 zA5tZF;eK+4|8}|`q;+l$(!1V59p#|hzOyHWb5%Ox*EE`n8q~zU52M^SlPKdw z3k@w(lPU8N3XS)oVB|ZfN!<<9yL~4&dM*sL_?nEVJv{zxdjb2@$98{MWAT_6YI3es z7#!SpV55Mv{++gX6zZZg&EE)cl{$L?HjDYFscxgylp zra-g~1d)tS1FWxply|)dw5g_k@_bPuIjh^r&4rfS7;b&tkE2&?fl$g;`vm z!QFIPVX(i)b+`CQk5k^lL5Ob<;~@v*dJ@OioC{T1sS^Bh&cQjWt!^R3r5qn~9>?_` zCf`b&!uDE3~{|9!lGo$LrnJd>Ufuq!Bc~%VCe|d zG&on~nuk<(ekU|uhB~c^W_}3!X1=-h!8|izZK-~V zcn!RX8Y1(_#5GKicyHYg@m|Ql&mwQM<(8O7*dE&X1M@EUw(>6N@i+UBY~RYe;2-a;dtiHI`GgKI zmo4Yzyq7US_F23SGqDdtN|dCGb|u7GmqHQ0#m7J9^?$RYdGqFV6?HeW%h#bMhxWL< z0W^78nzi16wRk-n@tWYBN$?;(x7xqphxvVw=Lg?Eus;}QvoG7+EFa6j{)_ix3hs^= z;2Uy-<2{ARUz?7;5w6#3(wo^$foZ&s3}h&$ek7}B5d zhR%E1lGk6RvveO9W^g$l9_QYXHb)P?%=2;0S(?|ze zVhqMgwOIDMlJAxH=h`&a%uw4!jc9l^Z~}{Khur9LUKQ1S+yhua7t5f&1H(*i8=?F5 zSoq(m%QJ9Jp?j?NAhFKG`hVcvRtuKud%x+v3^pW4_)E!e{*HgX-&l6O&%~UP49x%U z_5gLk0@NS%$jbtCPRMuM*XaiL@6UU{_f({*N4DDFdM?c3MrltNkh@EIxA|$Cjq(}h zd2N2XlkeZ@P?Axq!=rXvI~F`jyxU&cwrutI&YHYU2C)ZL{_&aQSD{Pb=gDO%+|Mqg z(7B!t2QI@gE603cM$cE3I_GBnP+xIJi8?#hu-SspJM#{b>h`uh=ew8hG3hRo;sWWJ zO6*mI6-VG&lC3X+dlSUD7ru*a6L$#nZX?@1;8oQ2F*nP=_0{pH&8ri=!M}4;nAz(E z#uIh%eS$)b=oc}_?j`02!Do%ZdBwaB@GtDrTCcX%%y~Y(hi&)+*J8^M&u~mriE~^9 z{wh&}sMyLl1ZWHDa!h#7^-ivvat)SsRbsOtoY~*UB9i{4wNP(IecqhakNLl+Ho0$$ zjO*ba8PhvCMC)<^7+y!lQx;J#FM;lCwl2NGX23u5&UjBX&PFwOui7$^N>E=eg3L2N z&Ze1bvw%fqQ4#Q{BJ{w_{3sn*pHbU=PrHFK{L(D|^Zw|9!G{5oB=U3EH5jQaI zQ4OE=1n&77#9QNEN}%`&L1fN+40`ELQB0YjjDBR!coa2|zJiQt50i1!!(eu7m07iqHL7|h~iiqw#O%>5? zNpOU$Nt@gUc}9lS9>KrW-`Q+m=pX#oz@N>5{tJOcL=5sJf5v9i4ip$>4~)j10#)`D z6l$Zc6s+n>ay1CAL7+f2o&)*g89x>BA7Cx{z@4gL<5j>mDt9yg(q8j^OLc!fQ*28U z5Z{d;Rg5PEYn>a^X5WR%2(M3rB3)XdvLC1EYqDWC?3bl8#63 zZ7?acZsZSMf*?b1gagTeIRyb{l7kp~QanJx_)ZbwM8T23ry}tj{`Z62!6xkc!X&DJ zT{1RPh5jAkC$J{_3O*0Qm$H1Yv6<+@(E+28Yn@wECZA2pNUuY3txId%#6X(4evFlW z_B|NO{PX@<`4=)^4%SuKhuJh}yqwHwkJ8}Dfiw&`;mFDe8da^Q(Q}NHHP1-dPlJ#z z@cWE821>8ip*Ja#hL?rWkZHjbo%0wCEmBh{aJXvbUFhC=#|S?ytuN_b%8mGJMQ8Q{ z|FYIllh0Qwo%d*N;xJoLd)tlmQtHvM{y?Vi|-zL$B;ZXRJ&k zEuUY5?5^74wJp@({f->|QstP%5L9`0FWe_IB;uoO9O>9$GOkIA@OLBJq6 z4=xj*V=b)BF$CX1LJpP(>xnoFXNGxaOsX@UVjC6vEa^vJp*+`Cf0 zE&1kk`tZd2wC2QeTK3H%dS(AS^c@yL2He5cIH0pG!o1mt&pqFP9FK^YMAD~}E8si> zUwdv}jleD)R}t0HLHhv|?Z6Efrg&#Rv+XedtZxuvBAahuKk&j=HT3B(Yw0ZJzuA0?>M=Lt zlQ&!H=t9E<+IxNny?)?1?Dr%pK@Knz7=O~t5Y8oW_qbj%#P>_qntRI?ksf;jwJ!IJ z*^f}(TZuGdZ7RL8cQ$E^!R_lXb5AALet~nnfgTR@(z(&#Qa_sW;RHH%@c`zQFk8VZFwT15bWDtS zG43ScM{RWa&N*6o>~)%rvt5e#Sky*D3~19mVrke8$EEzt!o&0FZoX6Rn;cvormcuR|%S1y-3g_*mL3D&v( zDmOdP;M@S(xN8OGkg#s%^Cs}gZ-9}l+qRO{Zux+|`Qb3t-2rxu?^=N?vV13RoxquR z0=^;_@vwv;bL=GIC*~b{Qwg8&?A{VObmhz6c*h*KfrWj4`g>qut7-M8@6)00574dp z+XAm^!`#fnSI2i#)?@>P=+OsbbiRsSuPI4MN!*Xx#b9|@rHFL>lH8DjV@9YcFb5hH> zm*jJ}kD0M>?v-Bo-6Fcte8W2bJ-P~P`~9_VQThZk8IvC+eNtaa%GS_pOBT@O%fMa5 z{2g@t&MkWOuVoYlKZE=BTU~r_i@-im(+W5G4hfEQ`7si>{E`n|6?ic3=`HjMtX#K* zVun9PfvD~K0k<6(*%hzOWFG2ItJl0mjg5B%{?5G&$F3g4nJ>W}fPb+Ekb!eA^iXmC z#Z%~U*n55(@N~&;7=!$1!`~@kWB}*2V(x*!wEfVFq#HDVR;+%L8qlM_`e}guuK#=$ znbFUT9;?$4G2KUUos)COP_0jaJi_%xR7!tfwHt-~G5;ri`JVD;Bmry3oOXlOlhGUfz1U~AqjU9VXwiYE;jcM|lllNkw;`rN-c^pi{+ISt(248Eq_YE? zIDPRnO)4A$Ji~zoM%YPx0l>$F3>qhzFl`9^_~S9?htEMf9X@`5;#2()`#9c0Pt!E+ zjVvfAa8zl#72yuJ6Fc0Wz6MU*($$ zjPu6!cBSDmEj{o8^8ZX==;$GU9D+VWT!J2$*Y?h#)3<)I`ZL({q1}{{t`I#1+z-*& zR{&Z3H1=dj>`S#fHv<1}!x_6zCx1CfgMnoS>g=0T(QdQz@+>muU#;t27^soe$ENzz zkz@O*70ot|G~d_=yUH^wKQZ@FmaE1XHSBd8~kIB(N|5I(8u1) z{to&)aq2r7G(rwO?3-0l?ls&`&Gw@)_LvwH?sDCdGJw85upRuj3Vj|0=AJ&z*x56| zy%WE!V^7IhD*E#9PO)D+|Ib%`q6KTF(wM~tnzDYl*n{FNIp}51pc$)1(sQ2`(~p;q zOZJB6zyIktWsEmre)L0#o(fxE1zsT&`rB#G*V_f&-voKTI&2!d$EYF z+_)z8itTgX@f}p~tc8X>F^~#AOhF$6&M|Cg*2d8^>F-0Rba@ti^@F6J_Kps^-B?e5 zT|A$3=;H_!^Fu%2I{-c+)Z#&NUYJhj&~LzJ@y^{A`tXxwq)T{+W4H5RmTnn*e%XJ9 z#|#KSuhe#6fgSUnn?g6PU!;4`58E{N^(=gQJ`KxJqel?F%j`yRBmL;9mka3!{H~#y zZ4J-eY^myB<}&An=7}k2|M|4!#nV&Z_yX~KBWujduqm=$-FnB zf9mje`ze1`G#OIeXlS*PrhdX_7{4ci?<_(rHEu~f#TO2s+}W{o_?w;72Ak%d8uq)F z(HFJn;11!dmw&W~wxKWO?1eL;M}&3Ad%J!2CQ2C{iu#*lBV>4udt{k+@y9lVJIp`a zWuIK{(LS|!6n%UAYidEyQLBhWIz(*3y0G~g+x^yv80Dw)KT-MIv1AzJMG?u~lnHEa z25L3MsQDEmmMz>ohQ=>Tq3B5iMEp`RXDpq<-nCf$mTj)4w!4T;q~jjN2RIT{o>iVv}gY|agVpOOLw@4dEl3% z9z5LpxZn04+eej8PsABP->A_ZzkTqfXAS&5W6_b$<%|I+sI?-6&&X94%e>y6EpYd-WXd<2up1^XrXEbm-(ETE6}*%AGlg)TqY< z8M=1JaX;X<4LBn*Qlb{Digm|1M?WMm?ojmcphq3P2DKm5P?TmL%9)%%@2&nXIt1H0 zf9+SqS@m=SbPnh5!1rI%l9hj@>`7+C3~m_P^@_?YdsZ9Qv)2PG|M6`Xm8Ez80G;R4 zevvMx(EHS?it+6jjXC%{y}IN{diCw6=!q9+Q1*;?(j@kv0KI*CprPv}xyfl=u-KA`5naQmi!2#4E&I_F;l_0EUU8?ntV!s&cKq+@GXj88|- zR13|0VH&-b`w$lEVm5B@5PuL{3QN|kHf z3xahXm4RB%xq;#CPs+6(RRKD$DGH-khQiXrBA(N`7ND&V9&!zj=@AfW zLF|tC<$Bknfe|hj;m0p2bS@|H`=yntDDQE=Cj9m3egAF0Tl#~X|NHO%a1Hz)#@E4N literal 0 HcmV?d00001 diff --git a/apps/frontend/public/site.webmanifest b/apps/frontend/public/site.webmanifest new file mode 100644 index 00000000..45dc8a20 --- /dev/null +++ b/apps/frontend/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/apps/frontend/src/feature/lotus/api.ts b/apps/frontend/src/feature/lotus/api.ts index 48d4d09c..1ab9fb6a 100644 --- a/apps/frontend/src/feature/lotus/api.ts +++ b/apps/frontend/src/feature/lotus/api.ts @@ -3,8 +3,8 @@ import { CodeViewValue } from '@/feature/codeView'; import { api } from '@/shared/common/api'; import { PageType } from '@/shared/pagination'; -export const getLotusList = async ({ page = 1 }: { page?: number }) => { - const response = await api.get(`/api/lotus?page=${page}&size=${9}`); +export const getLotusList = async ({ page = 1, keyword }: { page?: number; keyword?: string }) => { + const response = await api.get(`/api/lotus?page=${page}&size=${9}${keyword ? `&search=${keyword}` : ''}`); const lotuses: LotusType[] = response.data.lotuses.map((lotus: LotusType) => ({ ...lotus, diff --git a/apps/frontend/src/feature/lotus/hook.ts b/apps/frontend/src/feature/lotus/hook.ts deleted file mode 100644 index cd32d175..00000000 --- a/apps/frontend/src/feature/lotus/hook.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { useState } from 'react'; - -export const useLotusSearch = () => { - const [search, setSearch] = useState(''); - - const onChangeSearch = (searchValue: string) => { - setSearch(searchValue); - }; - - const onClickSearchLotus = (searchValue: string) => { - if (!searchValue) return; - - // TODO: queryClient.invalidateQueries 새로운 검색어로 검색 수행 - console.log('검색!: ', searchValue); - }; - - const onSearchInputKeyDown = (event: React.KeyboardEvent, searchValue: string) => { - if (event.key === 'Enter') onClickSearchLotus(searchValue); - }; - - return { - search, - onChangeSearch, - onClickSearchLotus, - onSearchInputKeyDown - }; -}; diff --git a/apps/frontend/src/feature/lotus/index.ts b/apps/frontend/src/feature/lotus/index.ts index 846f8766..c79ed10f 100644 --- a/apps/frontend/src/feature/lotus/index.ts +++ b/apps/frontend/src/feature/lotus/index.ts @@ -1,5 +1,4 @@ export * from './query'; -export * from './hook'; export * from './component'; export * from './type'; export * from './api'; diff --git a/apps/frontend/src/feature/user/api.ts b/apps/frontend/src/feature/user/api.ts index 16805427..cbab3aac 100644 --- a/apps/frontend/src/feature/user/api.ts +++ b/apps/frontend/src/feature/user/api.ts @@ -4,7 +4,7 @@ import { api } from '@/shared/common/api'; import { PageType } from '@/shared/pagination'; // 사용자의 Lotus 목록 조회 -export const getUserLotusList = async ({ page = 1, size = 10 }: { page?: number; size?: number }) => { +export const getUserLotusList = async ({ page = 1, size = 6 }: { page?: number; size?: number }) => { const response = await api.get(`/api/user/lotus?page=${page}&size=${size}`); const lotuses: LotusType[] = response.data.lotuses.map((lotus: LotusType) => ({ diff --git a/apps/frontend/src/page/(main)/lotus/index.lazy.tsx b/apps/frontend/src/page/(main)/lotus/index.lazy.tsx index 727ff8ae..1ebef842 100644 --- a/apps/frontend/src/page/(main)/lotus/index.lazy.tsx +++ b/apps/frontend/src/page/(main)/lotus/index.lazy.tsx @@ -2,29 +2,33 @@ import { createLazyFileRoute, getRouteApi } from '@tanstack/react-router'; import { lotusQueryOptions } from '@/feature/lotus'; import { AsyncBoundary } from '@/shared/boundary'; import { LotusSearchBar, SuspenseLotusList } from '@/widget/lotusList'; -import { SuspenseLotusPagination } from '@/widget/lotusList/SuspenseLotusPagination'; +import { SuspensePagination } from '@/widget/SuspensePagination'; -const { useSearch } = getRouteApi('/(main)/lotus/'); +const { useSearch, useNavigate } = getRouteApi('/(main)/lotus/'); export const Route = createLazyFileRoute('/(main)/lotus/')({ component: RouteComponent }); function RouteComponent() { - const { page } = useSearch(); + const { page, keyword } = useSearch(); - const lotusListQueryOptions = lotusQueryOptions.list({ page }); + const lotusListQueryOptions = lotusQueryOptions.list({ page, keyword }); + + const navigate = useNavigate(); + + const changePage = (page: number) => navigate({ to: '/lotus', search: { page } }); return (

); diff --git a/apps/frontend/src/page/(main)/lotus/index.tsx b/apps/frontend/src/page/(main)/lotus/index.tsx index 530c8438..edb2a2f4 100644 --- a/apps/frontend/src/page/(main)/lotus/index.tsx +++ b/apps/frontend/src/page/(main)/lotus/index.tsx @@ -2,7 +2,8 @@ import { createFileRoute } from '@tanstack/react-router'; import { z } from 'zod'; const lotusSearchValidation = z.object({ - page: z.number().default(1).optional() + page: z.number().default(1).optional(), + keyword: z.string().optional() }); export const Route = createFileRoute('/(main)/lotus/')({ diff --git a/apps/frontend/src/page/(main)/user/index.lazy.tsx b/apps/frontend/src/page/(main)/user/index.lazy.tsx index c4edee9a..da837b07 100644 --- a/apps/frontend/src/page/(main)/user/index.lazy.tsx +++ b/apps/frontend/src/page/(main)/user/index.lazy.tsx @@ -3,11 +3,11 @@ import { createLazyFileRoute, getRouteApi } from '@tanstack/react-router'; import { userQueryOptions } from '@/feature/user'; import { AsyncBoundary } from '@/shared/boundary'; import { SuspenseLotusList } from '@/widget/lotusList'; -import { SuspenseLotusPagination } from '@/widget/lotusList/SuspenseLotusPagination'; import { CreateLotusButton } from '@/widget/navigation'; +import { SuspensePagination } from '@/widget/SuspensePagination'; import { SuspenseUserInfoBox } from '@/widget/user/SuspenseUserInfoBox'; -const { useSearch } = getRouteApi('/(main)/user/'); +const { useSearch, useNavigate } = getRouteApi('/(main)/user/'); export const Route = createLazyFileRoute('/(main)/user/')({ component: RouteComponent @@ -16,8 +16,12 @@ export const Route = createLazyFileRoute('/(main)/user/')({ function RouteComponent() { const { page } = useSearch(); + const navigate = useNavigate(); + const userLotusListQueryOptions = userQueryOptions.lotusList({ page }); + const changePage = (page: number) => navigate({ to: '/user', search: { page } }); + return (
} rejected={() =>
Error
}> @@ -32,8 +36,8 @@ function RouteComponent() {
- } rejected={() =>
Error
}> - + } rejected={() =>
Error
}> +
diff --git a/apps/frontend/src/widget/Header.tsx b/apps/frontend/src/widget/Header.tsx index b8f85a4f..b5cf98e1 100644 --- a/apps/frontend/src/widget/Header.tsx +++ b/apps/frontend/src/widget/Header.tsx @@ -6,7 +6,10 @@ import { LoginButton } from './navigation/LoginButton'; import { userQueryOptions } from '@/feature/user/query'; export function Header() { - const { data } = useQuery(userQueryOptions.info()); + const { data } = useQuery({ + ...userQueryOptions.info(), + retry: 0 + }); const navigate = useNavigate(); diff --git a/apps/frontend/src/widget/lotusDetail/SuspenseLotusFiles.tsx b/apps/frontend/src/widget/lotusDetail/SuspenseLotusFiles.tsx index e1fe9af3..c4dead6f 100644 --- a/apps/frontend/src/widget/lotusDetail/SuspenseLotusFiles.tsx +++ b/apps/frontend/src/widget/lotusDetail/SuspenseLotusFiles.tsx @@ -8,7 +8,11 @@ export function SuspenseLotusFiles({ id }: { id: string }) { data: { files } } = useSuspenseQuery(lotusQueryOptions.detail({ id })); - const defaultIndex = files.findIndex(({ filename }) => filename === 'README.md'); + const readmeIndex = files.findIndex(({ filename }) => filename === 'README.md'); + + const firstMdIndex = files.findIndex(({ filename }) => filename.endsWith('.md')); + + const defaultIndex = readmeIndex > 0 ? readmeIndex : firstMdIndex > 0 ? firstMdIndex : 0; return ( diff --git a/apps/frontend/src/widget/lotusList/LotusSearchBar.tsx b/apps/frontend/src/widget/lotusList/LotusSearchBar.tsx index cfe8c90e..5ec7b946 100644 --- a/apps/frontend/src/widget/lotusList/LotusSearchBar.tsx +++ b/apps/frontend/src/widget/lotusList/LotusSearchBar.tsx @@ -1,12 +1,23 @@ +import { useState } from 'react'; import { Button, Heading, Input, Text } from '@froxy/design/components'; +import { getRouteApi } from '@tanstack/react-router'; import { IoIosSearch } from 'react-icons/io'; -import { useLotusSearch } from '@/feature/lotus/hook'; -export function LotusSearchBar() { - const { search, onChangeSearch, onClickSearchLotus, onSearchInputKeyDown } = useLotusSearch(); +const { useNavigate } = getRouteApi('/(main)/lotus/'); + +export function LotusSearchBar({ current = '' }: { current?: string }) { + const [keyword, setKeyword] = useState(current); + + const navigate = useNavigate(); + + const submit = (e: React.FormEvent) => { + e.preventDefault(); + + navigate({ search: { keyword } }); + }; return ( -
+
Lotus @@ -22,16 +33,15 @@ export function LotusSearchBar() {
onChangeSearch(e.target.value)} - placeholder="제목 및 태그를 검색해주세요" - onKeyDown={(e) => onSearchInputKeyDown(e, search)} + value={keyword} + onChange={(e) => setKeyword(e.target.value.trim())} + placeholder="제목을 검색해주세요" />
-
-
+ ); } diff --git a/apps/frontend/src/widget/lotusList/SuspenseLotusPagination.tsx b/apps/frontend/src/widget/lotusList/SuspenseLotusPagination.tsx deleted file mode 100644 index 3ce0387e..00000000 --- a/apps/frontend/src/widget/lotusList/SuspenseLotusPagination.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { useSuspenseQuery } from '@tanstack/react-query'; -import { useNavigate } from '@tanstack/react-router'; -import { LotusLostQueryOptions } from './type'; -import { Pagination } from '@/shared/pagination'; - -export function SuspenseLotusPagination({ queryOptions }: { queryOptions: LotusLostQueryOptions }) { - const { data: lotusList } = useSuspenseQuery(queryOptions); - const navigate = useNavigate(); - - return ( - navigate({ to: '/lotus', search: { page } })} - /> - ); -} - -SuspenseLotusPagination.Skeleton = Pagination.Skeleton; diff --git a/docker-compose.yml b/docker-compose.yml index 973ba8da..e013181f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,7 @@ services: dockerfile: Dockerfile container_name: froxy-api ports: - - "3000:3000" + - '3000:3000' depends_on: - mysql @@ -17,9 +17,9 @@ services: env_file: - ./apps/backend/.env ports: - - "3306:3307" + - '3306:3306' volumes: - - mysql-data:/var/lib/mysql + - ./mysql-data:/var/lib/mysql volumes: mysql-data: From 48ccbe8661ce32bc586a66daf98ab05c366acb9f Mon Sep 17 00:00:00 2001 From: kimhji <126762281+kimhji@users.noreply.github.com> Date: Tue, 26 Nov 2024 21:10:46 +0900 Subject: [PATCH 05/10] =?UTF-8?q?feat(#161):=20search=EB=A5=BC=20tag?= =?UTF-8?q?=EA=B0=80=20=EC=95=84=EB=8B=8C=20title=EB=A1=9C=20=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95=20(#162)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/backend/src/lotus/lotus.service.ts | 47 ++++++++++++++----------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/apps/backend/src/lotus/lotus.service.ts b/apps/backend/src/lotus/lotus.service.ts index 8732a305..224df691 100644 --- a/apps/backend/src/lotus/lotus.service.ts +++ b/apps/backend/src/lotus/lotus.service.ts @@ -1,6 +1,6 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { title } from 'process'; -import { In } from 'typeorm'; +import { In, Like } from 'typeorm'; import { LotusCreateRequestDto } from './dto/lotus.createRequest.dto'; import { LotusDetailDto } from './dto/lotus.detail.dto'; import { LotusDto } from './dto/lotus.dto'; @@ -132,7 +132,8 @@ export class LotusService { } async getPublicLotus(page: number, size: number, search: string): Promise { - const [lotusData, totalNum] = await this.getLotusByTags(page, size, search); + //const [lotusData, totalNum] = await this.getLotusByTags(page, size, search); + const [lotusData, totalNum] = await this.getLotusByTitle(page, size, search); const maxPage = Math.ceil(totalNum / size); if (page > maxPage && maxPage !== 0) { throw new HttpException('page must be lower than max page', HttpStatus.NOT_FOUND); @@ -143,26 +144,32 @@ export class LotusService { return LotusPublicDto.ofLotusList(lotusData, page, maxPage); } + async getLotusByTitle(page: number, size: number, search: string) { + const whereData = { + isPublic: true + }; + if (search) { + whereData['title'] = Like(`%${search}%`); + } + return await this.lotusRepository.findAndCount({ + where: whereData, + skip: (page - 1) * size, + take: size, + relations: ['tags', 'user'], + order: { createdAt: 'DESC' } + }); + } + async getLotusByTags(page: number, size: number, search: string) { - if (!search) { - return await this.lotusRepository.findAndCount({ - where: { - isPublic: true - }, - skip: (page - 1) * size, - take: size, - relations: ['tags', 'user'], - order: { createdAt: 'DESC' } - }); - } - const tags = await this.tagService.searchTag(search); + const whereData = { + isPublic: true + }; + if (search) { + const tags = await this.tagService.searchTag(search); + whereData['tags'] = { tagId: In(tags) }; + } return await this.lotusRepository.findAndCount({ - where: { - isPublic: true, - tags: { - tagId: In(tags) - } - }, + where: whereData, skip: (page - 1) * size, take: size, relations: ['tags', 'user'], From 6ec427601f697cdd3a39da49b648c9a48d49b1dd Mon Sep 17 00:00:00 2001 From: naarang <93020785+naarang@users.noreply.github.com> Date: Wed, 27 Nov 2024 00:03:40 +0900 Subject: [PATCH 06/10] =?UTF-8?q?Feature=20#117:=20error=20fallback=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=ED=95=98=EA=B8=B0=20(#163)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(#117): lotus 목록 페이지 error fallback 처리하기 * feat(#117): 사용자 정보 페이지 error fallback 처리하기 * feat(#117): lotus 상세 페이지 error fallback 처리하기 * feat(#117): lotus 생성 페이지 error fallback 처리하기 * refactor(#117): errorFallback -> Error 컴포넌트로 이름 수정하기 * refactor(#117): 페이지 전역 에러 처리 레이아웃을 GlobalError 컴포넌트로 분리 * fix(#117): gistFile 뷰에서 에러 발생 시에도 높이, 너비 유지하기 --- apps/frontend/public/json/errorAnimation.json | 463 ++++++++++++++++++ apps/frontend/src/feature/lotus/util.ts | 28 +- .../page/(main)/lotus/$lotusId/index.lazy.tsx | 57 ++- .../page/(main)/lotus/create/index.lazy.tsx | 24 +- .../src/page/(main)/lotus/index.lazy.tsx | 28 +- .../src/page/(main)/user/index.lazy.tsx | 53 +- .../shared/common/component/GlobalError.tsx | 25 + .../src/shared/common/component/index.ts | 1 + .../history/SuspenseLotusHistoryList.tsx | 63 ++- .../widget/lotusCreate/LotusCreateForm.tsx | 11 +- .../widget/lotusCreate/SuspenseGistFiles.tsx | 43 +- .../lotusCreate/SuspenseUserGistSelect.tsx | 31 +- .../lotusList/SuspenseLotusCardList.tsx | 37 +- .../src/widget/user/SuspenseUserInfoBox.tsx | 32 +- 14 files changed, 839 insertions(+), 57 deletions(-) create mode 100644 apps/frontend/public/json/errorAnimation.json create mode 100644 apps/frontend/src/shared/common/component/GlobalError.tsx diff --git a/apps/frontend/public/json/errorAnimation.json b/apps/frontend/public/json/errorAnimation.json new file mode 100644 index 00000000..a602c482 --- /dev/null +++ b/apps/frontend/public/json/errorAnimation.json @@ -0,0 +1,463 @@ +{ + "v": "5.5.10", + "fr": 29.9700012207031, + "ip": 0, + "op": 75.0000030548126, + "w": 300, + "h": 335, + "nm": "Comp 1", + "ddd": 0, + "assets": [], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Shape Layer 6", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "t": 25, + "s": [148, 190.571, 0], + "to": [0, 1.667, 0], + "ti": [0, -1.667, 0] + }, + { "t": 32.0000013033867, "s": [148, 200.571, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [0, 31.75, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 25, + "s": [0, 0, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0, 0] }, + "t": 32, + "s": [119.25, 136.286, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0, 0] }, + "t": 34, + "s": [86, 98.286, 100] + }, + { "t": 36.0000014663101, "s": [100, 114.286, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [20, 20], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 40.5], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 25.0000010182709, + "op": 372.000015151871, + "st": -6.00000024438501, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Shape Layer 5", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [149, 187.5, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 78.156, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 19, + "s": [52.459, 2.459, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0, 0] }, + "t": 27, + "s": [52.459, 61.459, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0, 0] }, + "t": 30.5, + "s": [52.459, 45.459, 100] + }, + { "t": 34.0000013848484, "s": [52.459, 52.459, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "hasMask": true, + "masksProperties": [ + { + "inv": false, + "mode": "f", + "pt": { + "a": 0, + "k": { + "i": [ + [-3.805, 13.022], + [-0.092, 37.927], + [0, -49.691], + [-4.587, -15.298] + ], + "o": [ + [3.996, -13.582], + [0, -49.932], + [0, 37.689], + [4.06, 13.26] + ], + "v": [ + [10.277, 74.31], + [31.587, -36.638], + [-30.587, -36.638], + [-9.624, 74.31] + ], + "c": true + }, + "ix": 1 + }, + "o": { "a": 0, "k": 100, "ix": 3 }, + "x": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Mask 1" + } + ], + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [234, 260], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [5, 1.5], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 19.0000007738859, + "op": 374.000015233332, + "st": -4.00000016292334, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "Shape Layer 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 167, 0], "ix": 2 }, + "a": { "a": 0, "k": [-4, -8.5, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.471, 0.471, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.48, 0.48, 0.333], "y": [0, 0, 0] }, + "t": 7, + "s": [0, 0, 100] + }, + { "t": 25.0000010182709, "s": [78.151, 78.151, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [238, 238], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 0.486274509804, 0.501960784314, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-4, -8.5], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 7.00000028511585, + "op": 385.000015681372, + "st": 7.00000028511585, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "Shape Layer 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 20, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 167, 0], "ix": 2 }, + "a": { "a": 0, "k": [-4, -8.5, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.471, 0.471, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.48, 0.48, 0.333], "y": [0, 0, 0] }, + "t": 3, + "s": [0, 0, 100] + }, + { "t": 21.0000008553475, "s": [96.639, 96.639, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [238, 238], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 0.486274509804, 0.501960784314, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-4, -8.5], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 3.00000012219251, + "op": 381.000015518448, + "st": 3.00000012219251, + "bm": 0 + }, + { + "ddd": 0, + "ind": 7, + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 10, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 167, 0], "ix": 2 }, + "a": { "a": 0, "k": [-4, -8.5, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.471, 0.471, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.48, 0.48, 0.333], "y": [0, 0, 0] }, + "t": 0, + "s": [0, 0, 100] + }, + { "t": 18.000000733155, "s": [110.084, 110.084, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [238, 238], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 0.486274509804, 0.501960784314, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-4, -8.5], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 378.000015396256, + "st": 0, + "bm": 0 + } + ], + "markers": [{ "tm": 40.0000016292334, "cm": "", "dr": 0 }] +} diff --git a/apps/frontend/src/feature/lotus/util.ts b/apps/frontend/src/feature/lotus/util.ts index a3b7e932..8b77b1b4 100644 --- a/apps/frontend/src/feature/lotus/util.ts +++ b/apps/frontend/src/feature/lotus/util.ts @@ -1,5 +1,31 @@ -import { AxiosError } from 'axios'; +import axios, { AxiosError } from 'axios'; +// NOTE: Lotus 디테일 관련 에러 처리 +export const AxiosErrorLotusData = { + ['DEFAULT']: { + description: '오류가 발생했습니다.' + }, + [401]: { + description: '로그인이 필요합니다.' + }, + [403]: { + description: '비공개된 Lotus입니다.' + }, + [404]: { + description: '존재하지 않는 Lotus입니다.' + } +} as const; + +export const getLotusErrorData = (error: Error) => { + if (!axios.isAxiosError(error)) return AxiosErrorLotusData['DEFAULT']; + + const status = error?.status || 'DEFAULT'; + if (!(status in AxiosErrorLotusData)) return AxiosErrorLotusData['DEFAULT']; + + return AxiosErrorLotusData[status as keyof typeof AxiosErrorLotusData]; +}; + +// NOTE: toast 관련 에러 처리 export const AxiosErrorToastData = { ['DEFAULT']: { description: '오류가 발생했습니다. 다시 시도해 주세요.', diff --git a/apps/frontend/src/page/(main)/lotus/$lotusId/index.lazy.tsx b/apps/frontend/src/page/(main)/lotus/$lotusId/index.lazy.tsx index 55a04faa..c979059d 100644 --- a/apps/frontend/src/page/(main)/lotus/$lotusId/index.lazy.tsx +++ b/apps/frontend/src/page/(main)/lotus/$lotusId/index.lazy.tsx @@ -1,16 +1,20 @@ +import { Suspense } from 'react'; +import { useQueryErrorResetBoundary } from '@tanstack/react-query'; import { createLazyFileRoute, getRouteApi } from '@tanstack/react-router'; import { lotusHistoryQueryOptions } from '@/feature/history/query'; -import { AsyncBoundary } from '@/shared/boundary'; +import { getLotusErrorData } from '@/feature/lotus'; +import { GlobalError } from '@/shared'; +import { ErrorBoundary } from '@/shared/boundary'; import { SuspenseLotusHistoryList } from '@/widget/history'; import { CodeRunButton } from '@/widget/lotusCodeRun'; import { SuspenseLotusDetail } from '@/widget/lotusDetail'; import { SuspenseLotusFiles } from '@/widget/lotusDetail/SuspenseLotusFiles'; import { SuspensePagination } from '@/widget/SuspensePagination'; - import '@/app/style/github.css'; export const Route = createLazyFileRoute('/(main)/lotus/$lotusId/')({ - component: RouteComponent + component: RouteComponent, + errorComponent: ErrorComponent }); const { useSearch, useNavigate, useParams } = getRouteApi('/(main)/lotus/$lotusId/'); @@ -22,32 +26,47 @@ function RouteComponent() { const navigate = useNavigate(); - const handleChangePage = (page: number) => { - navigate({ search: { page } }); - }; + const handleChangePage = (page: number) => navigate({ search: { page } }); return (
- } rejected={() =>
Error!
}> + }> -
+ - } rejected={() =>
Error!
}> + }> -
+ - Loading...
} rejected={() =>
Error!
}> - - + ( + + )} + > + }> + + - Loading...
} rejected={() =>
Error!
}> - - + }> + + +
); } + +function ErrorComponent({ error, reset }: { error: Error; reset: () => void }) { + const { reset: retry } = useQueryErrorResetBoundary(); + + const handleRetry = () => { + retry(); + reset(); + }; + + return ; +} diff --git a/apps/frontend/src/page/(main)/lotus/create/index.lazy.tsx b/apps/frontend/src/page/(main)/lotus/create/index.lazy.tsx index 6eda8587..6cfffa5f 100644 --- a/apps/frontend/src/page/(main)/lotus/create/index.lazy.tsx +++ b/apps/frontend/src/page/(main)/lotus/create/index.lazy.tsx @@ -1,8 +1,12 @@ +import { useQueryErrorResetBoundary } from '@tanstack/react-query'; import { createLazyFileRoute } from '@tanstack/react-router'; +import axios from 'axios'; +import { GlobalError } from '@/shared'; import { LotusCreateForm } from '@/widget/lotusCreate/LotusCreateForm'; export const Route = createLazyFileRoute('/(main)/lotus/create/')({ - component: RouteComponent + component: RouteComponent, + errorComponent: ErrorComponent }); function RouteComponent() { @@ -12,3 +16,21 @@ function RouteComponent() {
); } + +function ErrorComponent({ error, reset }: { error: Error; reset: () => void }) { + const { reset: retry } = useQueryErrorResetBoundary(); + + const isLoginRequired = axios.isAxiosError(error) && error?.status === 401; + + const handleRetry = () => { + retry(); + reset(); + }; + + return ( + + ); +} diff --git a/apps/frontend/src/page/(main)/lotus/index.lazy.tsx b/apps/frontend/src/page/(main)/lotus/index.lazy.tsx index 1ebef842..f91a7cc3 100644 --- a/apps/frontend/src/page/(main)/lotus/index.lazy.tsx +++ b/apps/frontend/src/page/(main)/lotus/index.lazy.tsx @@ -1,6 +1,7 @@ +import { Suspense } from 'react'; import { createLazyFileRoute, getRouteApi } from '@tanstack/react-router'; import { lotusQueryOptions } from '@/feature/lotus'; -import { AsyncBoundary } from '@/shared/boundary'; +import { ErrorBoundary } from '@/shared/boundary'; import { LotusSearchBar, SuspenseLotusList } from '@/widget/lotusList'; import { SuspensePagination } from '@/widget/SuspensePagination'; @@ -12,24 +13,29 @@ export const Route = createLazyFileRoute('/(main)/lotus/')({ function RouteComponent() { const { page, keyword } = useSearch(); + const navigate = useNavigate(); const lotusListQueryOptions = lotusQueryOptions.list({ page, keyword }); - const navigate = useNavigate(); - - const changePage = (page: number) => navigate({ to: '/lotus', search: { page } }); + const onChangePage = (page: number = 1) => navigate({ to: '/lotus', search: { page } }); return (
- } rejected={() =>
Error
}> - -
- - } rejected={() =>
Error
}> - -
+ ( + + )} + > + }> + + + + }> + + +
); } diff --git a/apps/frontend/src/page/(main)/user/index.lazy.tsx b/apps/frontend/src/page/(main)/user/index.lazy.tsx index da837b07..711b27fe 100644 --- a/apps/frontend/src/page/(main)/user/index.lazy.tsx +++ b/apps/frontend/src/page/(main)/user/index.lazy.tsx @@ -1,7 +1,11 @@ +import { Suspense } from 'react'; import { Heading } from '@froxy/design/components'; +import { useQueryErrorResetBoundary } from '@tanstack/react-query'; import { createLazyFileRoute, getRouteApi } from '@tanstack/react-router'; +import axios from 'axios'; import { userQueryOptions } from '@/feature/user'; -import { AsyncBoundary } from '@/shared/boundary'; +import { GlobalError } from '@/shared'; +import { AsyncBoundary, ErrorBoundary } from '@/shared/boundary'; import { SuspenseLotusList } from '@/widget/lotusList'; import { CreateLotusButton } from '@/widget/navigation'; import { SuspensePagination } from '@/widget/SuspensePagination'; @@ -10,21 +14,24 @@ import { SuspenseUserInfoBox } from '@/widget/user/SuspenseUserInfoBox'; const { useSearch, useNavigate } = getRouteApi('/(main)/user/'); export const Route = createLazyFileRoute('/(main)/user/')({ - component: RouteComponent + component: RouteComponent, + errorComponent: ErrorComponent }); function RouteComponent() { const { page } = useSearch(); - const navigate = useNavigate(); const userLotusListQueryOptions = userQueryOptions.lotusList({ page }); - const changePage = (page: number) => navigate({ to: '/user', search: { page } }); + const onChangePage = (page: number = 1) => navigate({ to: '/user', search: { page } }); return (
- } rejected={() =>
Error
}> + } + rejected={({ error, retry }) => } + >
@@ -32,14 +39,38 @@ function RouteComponent() { 내가 작성한 Lotus
- } rejected={() =>
Error
}> - -
+ ( + + )} + > + }> + + - } rejected={() =>
Error
}> - -
+ }> + + +
); } + +function ErrorComponent({ error, reset }: { error: Error; reset: () => void }) { + const { reset: retry } = useQueryErrorResetBoundary(); + + const isLoginRequired = axios.isAxiosError(error) && error?.status === 401; + + const handleRetry = () => { + retry(); + reset(); + }; + + return ( + + ); +} diff --git a/apps/frontend/src/shared/common/component/GlobalError.tsx b/apps/frontend/src/shared/common/component/GlobalError.tsx new file mode 100644 index 00000000..eb4e8d78 --- /dev/null +++ b/apps/frontend/src/shared/common/component/GlobalError.tsx @@ -0,0 +1,25 @@ +import { Button, Heading } from '@froxy/design/components'; +import { DotLottieReact } from '@lottiefiles/dotlottie-react'; +import { Link } from '@tanstack/react-router'; + +interface GlobalErrorProps { + description?: string; + handleRetry: () => void; +} + +export function GlobalError({ description, handleRetry }: GlobalErrorProps) { + return ( +
+ + {description ?? '오류가 발생했습니다'} +
+ + +
+
+ ); +} diff --git a/apps/frontend/src/shared/common/component/index.ts b/apps/frontend/src/shared/common/component/index.ts index eed5c7cb..ee15273c 100644 --- a/apps/frontend/src/shared/common/component/index.ts +++ b/apps/frontend/src/shared/common/component/index.ts @@ -1,2 +1,3 @@ export * from './ModalBox'; export * from './Time'; +export * from './GlobalError'; diff --git a/apps/frontend/src/widget/history/SuspenseLotusHistoryList.tsx b/apps/frontend/src/widget/history/SuspenseLotusHistoryList.tsx index b4d829d5..b870b5da 100644 --- a/apps/frontend/src/widget/history/SuspenseLotusHistoryList.tsx +++ b/apps/frontend/src/widget/history/SuspenseLotusHistoryList.tsx @@ -1,8 +1,19 @@ -import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@froxy/design/components'; -import { useSuspenseQuery } from '@tanstack/react-query'; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, + Button, + Heading, + Skeleton +} from '@froxy/design/components'; +import { DotLottieReact } from '@lottiefiles/dotlottie-react'; +import { useQueryErrorResetBoundary, useSuspenseQuery } from '@tanstack/react-query'; +import axios from 'axios'; import { HistoryTrigger } from './HistoryTrigger'; import { SuspenseLotusHistoryDetail } from './SuspenseLotusHistoryDetail'; import { lotusHistoryQueryOptions } from '@/feature/history/query'; +import { range } from '@/shared'; import { AsyncBoundary } from '@/shared/boundary'; export function SuspenseLotusHistoryList({ id, page = 1 }: { id: string; page?: number }) { @@ -12,7 +23,7 @@ export function SuspenseLotusHistoryList({ id, page = 1 }: { id: string; page?: const pendingHistoriesId = list.filter((history) => history.status === 'PENDING').map((history) => history.id); - const firstPageFirstItem = page === 1 ? [list[0].id] : []; + const firstPageFirstItem = page === 1 ? [list[0]?.id] : []; return (
@@ -45,3 +56,49 @@ export function SuspenseLotusHistoryList({ id, page = 1 }: { id: string; page?:
); } + +export function SkeletonLotusHistoryList() { + return ( +
+ {range(5).map((value) => ( + + ))} +
+ ); +} + +SuspenseLotusHistoryList.Skeleton = SkeletonLotusHistoryList; + +interface ErrorProps { + error: unknown; + retry: () => void; + onChangePage: (page: number) => Promise; +} + +function ErrorLotusHistoryList({ error, retry, onChangePage }: ErrorProps) { + const { reset } = useQueryErrorResetBoundary(); + + if (axios.isAxiosError(error) && (error?.status === 401 || error?.status === 403)) throw error; + + const handleRetry = async () => { + if (axios.isAxiosError(error) && error?.status === 404) { + await onChangePage(1); + } else { + reset(); + } + retry(); + }; + + return ( +
+ + History 목록 조회에 실패했습니다 + +
+ ); +} + +SuspenseLotusHistoryList.Error = ErrorLotusHistoryList; diff --git a/apps/frontend/src/widget/lotusCreate/LotusCreateForm.tsx b/apps/frontend/src/widget/lotusCreate/LotusCreateForm.tsx index a1fb43ff..6c83021d 100644 --- a/apps/frontend/src/widget/lotusCreate/LotusCreateForm.tsx +++ b/apps/frontend/src/widget/lotusCreate/LotusCreateForm.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { Suspense, useState } from 'react'; import { Button, Heading, Input, Switch, Text } from '@froxy/design/components'; import { useNavigate } from '@tanstack/react-router'; import { TiPencil } from 'react-icons/ti'; @@ -95,13 +95,16 @@ export function LotusCreateForm() { setFormValue((prev) => ({ ...prev, tags }))} /> 불러올 Gist - Loading} rejected={() =>
Error!!
}> + }> setFormValue((prev) => ({ ...prev, gistUuid }))} /> -
+ {formValue.gistUuid && ( - Loading...} rejected={() =>
Error
}> + } + rejected={({ error, retry }) => } + > )} diff --git a/apps/frontend/src/widget/lotusCreate/SuspenseGistFiles.tsx b/apps/frontend/src/widget/lotusCreate/SuspenseGistFiles.tsx index 42604f9a..1999be6b 100644 --- a/apps/frontend/src/widget/lotusCreate/SuspenseGistFiles.tsx +++ b/apps/frontend/src/widget/lotusCreate/SuspenseGistFiles.tsx @@ -1,7 +1,9 @@ -import { useSuspenseQuery } from '@tanstack/react-query'; +import { DotLottieReact } from '@lottiefiles/dotlottie-react'; +import { useQueryErrorResetBoundary, useSuspenseQuery } from '@tanstack/react-query'; +import axios from 'axios'; +import { Button, Heading, Skeleton } from '@/components'; import { CodeView } from '@/feature/codeView'; import { userQueryOptions } from '@/feature/user/query'; - import '@/app/style/github.css'; export function SuspenseGistFiles({ gistId }: { gistId: string }) { @@ -18,3 +20,40 @@ export function SuspenseGistFiles({ gistId }: { gistId: string }) { ); } + +export function SkeletonGistFiles() { + return ( +
+ + +
+ ); +} + +SuspenseGistFiles.Skeleton = SkeletonGistFiles; + +interface ErrorProps { + error: unknown; + retry: () => void; +} + +function ErrorGistFiles({ error, retry }: ErrorProps) { + const { reset } = useQueryErrorResetBoundary(); + + if (axios.isAxiosError(error) && error?.status === 401) throw error; + + const handleRetry = async () => { + reset(); + retry(); + }; + + return ( +
+ + 선택한 Gist의 파일 조회에 실패했습니다 + +
+ ); +} + +SuspenseGistFiles.Error = ErrorGistFiles; diff --git a/apps/frontend/src/widget/lotusCreate/SuspenseUserGistSelect.tsx b/apps/frontend/src/widget/lotusCreate/SuspenseUserGistSelect.tsx index 0c32b483..f7ccdd24 100644 --- a/apps/frontend/src/widget/lotusCreate/SuspenseUserGistSelect.tsx +++ b/apps/frontend/src/widget/lotusCreate/SuspenseUserGistSelect.tsx @@ -1,5 +1,15 @@ -import { Button, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Text } from '@froxy/design/components'; +import { + Button, + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, + Skeleton, + Text +} from '@froxy/design/components'; import { useUserGistListSuspenseInfinity } from '@/feature/user/query'; +import { range } from '@/shared'; export function SuspenseUserGistSelect({ onValueChange }: { onValueChange: (value: string) => void }) { const { data, fetchNextPage, isFetchingNextPage } = useUserGistListSuspenseInfinity(); @@ -43,3 +53,22 @@ function SkeletonNextPages({ size = 5 }: { size?: number }) { )); } + +function SkeletonUserGistSelect() { + return ( +
+ +
+ ); +} + +SuspenseUserGistSelect.Skeleton = SkeletonUserGistSelect; diff --git a/apps/frontend/src/widget/lotusList/SuspenseLotusCardList.tsx b/apps/frontend/src/widget/lotusList/SuspenseLotusCardList.tsx index 09e3e587..cc244595 100644 --- a/apps/frontend/src/widget/lotusList/SuspenseLotusCardList.tsx +++ b/apps/frontend/src/widget/lotusList/SuspenseLotusCardList.tsx @@ -1,5 +1,7 @@ -import { Skeleton } from '@froxy/design/components'; -import { useSuspenseQuery } from '@tanstack/react-query'; +import { Button, Heading, Skeleton } from '@froxy/design/components'; +import { DotLottieReact } from '@lottiefiles/dotlottie-react'; +import { useQueryErrorResetBoundary, useSuspenseQuery } from '@tanstack/react-query'; +import axios from 'axios'; import { LotusLostQueryOptions } from './type'; import { Lotus } from '@/feature/lotus'; import { range } from '@/shared'; @@ -55,3 +57,34 @@ function SkeletonLotusCardList() { } SuspenseLotusList.Skeleton = SkeletonLotusCardList; + +interface ErrorProps { + error: unknown; + retry: () => void; + onChangePage: (page?: number) => Promise; +} + +function ErrorLotusCardList({ error, retry, onChangePage }: ErrorProps) { + const { reset } = useQueryErrorResetBoundary(); + + if (axios.isAxiosError(error) && error?.status === 401) throw error; + + const handleRetry = async () => { + if (axios.isAxiosError(error) && error?.status === 404) { + await onChangePage(1); + } else { + reset(); + } + retry(); + }; + + return ( +
+ + Lotus 목록 조회에 실패했습니다 + +
+ ); +} + +SuspenseLotusList.Error = ErrorLotusCardList; diff --git a/apps/frontend/src/widget/user/SuspenseUserInfoBox.tsx b/apps/frontend/src/widget/user/SuspenseUserInfoBox.tsx index 89605ee3..ec6577b5 100644 --- a/apps/frontend/src/widget/user/SuspenseUserInfoBox.tsx +++ b/apps/frontend/src/widget/user/SuspenseUserInfoBox.tsx @@ -1,7 +1,9 @@ import { useState } from 'react'; import { Text } from '@froxy/design/components'; -import { Skeleton } from '@froxy/design/components'; -import { useQueryClient, useSuspenseQuery } from '@tanstack/react-query'; +import { Button, Heading, Skeleton } from '@froxy/design/components'; +import { DotLottieReact } from '@lottiefiles/dotlottie-react'; +import { useQueryClient, useQueryErrorResetBoundary, useSuspenseQuery } from '@tanstack/react-query'; +import axios from 'axios'; import { GoPencil } from 'react-icons/go'; import { UserInfoInputForm } from '@/feature/user/component'; import { useUserMutation, userQueryOptions } from '@/feature/user/query'; @@ -107,3 +109,29 @@ function SkeletonUserInfoBox() { } SuspenseUserInfoBox.Skeleton = SkeletonUserInfoBox; + +interface ErrorProps { + error: unknown; + retry: () => void; +} + +function ErrorUserInfoBox({ error, retry }: ErrorProps) { + const { reset } = useQueryErrorResetBoundary(); + + if (axios.isAxiosError(error)) throw error; + + const handleRetry = async () => { + reset(); + retry(); + }; + + return ( +
+ + 사용자 정보 조회에 실패했습니다. + +
+ ); +} + +SuspenseUserInfoBox.Error = ErrorUserInfoBox; From 762c10bf3649e68ffbc2b6e28c007dd163e5b47e Mon Sep 17 00:00:00 2001 From: ATeals <125727432+ATeals@users.noreply.github.com> Date: Wed, 27 Nov 2024 10:33:22 +0900 Subject: [PATCH 07/10] =?UTF-8?q?Feature=20#164=20feature=20model=20?= =?UTF-8?q?=EA=B3=84=EC=B8=B5=EC=9C=BC=EB=A1=9C=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=84=B0=EB=A7=81=20(#165)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor(#164): codeView model * refactor(#164): history model * refactor(#164): lotus model * refactor(#164): pagination model * refactor(#164): user model * refactor(#164): model 변경사항 적용 --- apps/frontend/src/app/main.tsx | 24 ++-- apps/frontend/src/app/mock/lotusResolvers.ts | 104 +++++++++++------- .../codeView/component/CodeViewProvider.tsx | 4 +- .../feature/codeView/component/CodeViewer.tsx | 56 +--------- .../frontend/src/feature/codeView/constant.ts | 45 ++++++++ apps/frontend/src/feature/codeView/hook.ts | 4 +- apps/frontend/src/feature/codeView/index.ts | 2 +- apps/frontend/src/feature/codeView/model.ts | 52 +++++++++ apps/frontend/src/feature/codeView/type.ts | 5 - apps/frontend/src/feature/history/api.ts | 36 +++--- .../src/feature/history/component.tsx | 6 +- apps/frontend/src/feature/history/index.ts | 1 + apps/frontend/src/feature/history/model.ts | 41 +++++++ apps/frontend/src/feature/history/type.ts | 9 -- apps/frontend/src/feature/lotus/api.ts | 90 ++++++++------- apps/frontend/src/feature/lotus/component.tsx | 43 +++----- apps/frontend/src/feature/lotus/index.ts | 1 + apps/frontend/src/feature/lotus/model.ts | 47 ++++++++ apps/frontend/src/feature/lotus/type.ts | 13 --- .../pagination/Pagination.tsx | 2 +- .../{shared => feature}/pagination/index.ts | 0 apps/frontend/src/feature/pagination/type.ts | 14 +++ .../pagination/usePagination.tsx | 0 apps/frontend/src/feature/user/api.ts | 48 ++++---- .../src/feature/user/component/User.tsx | 60 ++++++++++ .../UserInfoInputForm.tsx} | 0 .../src/feature/user/component/index.ts | 2 + apps/frontend/src/feature/user/index.ts | 2 +- apps/frontend/src/feature/user/model.ts | 20 ++++ apps/frontend/src/feature/user/type.ts | 5 - apps/frontend/src/feature/user/util.ts | 3 +- apps/frontend/src/page/(main)/route.lazy.tsx | 2 +- apps/frontend/src/shared/pagination/type.ts | 4 - .../src/widget/SuspensePagination.tsx | 2 +- .../src/widget/history/HistoryTrigger.tsx | 4 +- .../history/SuspenseLotusHistoryList.tsx | 3 +- .../widget/lotusCreate/LotusCreateForm.tsx | 4 +- .../widget/lotusCreate/SuspenseGistFiles.tsx | 7 +- .../lotusDetail/SuspenseLotusDetail.tsx | 28 ++--- .../widget/lotusDetail/SuspenseLotusFiles.tsx | 13 +-- .../lotusList/SuspenseLotusCardList.tsx | 39 ++++--- apps/frontend/src/widget/lotusList/type.ts | 6 +- .../widget/lotusUpdate/LotusUpdateForm.tsx | 4 +- .../lotusUpdate/SuspenseLotusPublicToggle.tsx | 23 ++-- 44 files changed, 560 insertions(+), 318 deletions(-) create mode 100644 apps/frontend/src/feature/codeView/constant.ts create mode 100644 apps/frontend/src/feature/codeView/model.ts delete mode 100644 apps/frontend/src/feature/codeView/type.ts create mode 100644 apps/frontend/src/feature/history/model.ts create mode 100644 apps/frontend/src/feature/lotus/model.ts rename apps/frontend/src/{shared => feature}/pagination/Pagination.tsx (96%) rename apps/frontend/src/{shared => feature}/pagination/index.ts (100%) create mode 100644 apps/frontend/src/feature/pagination/type.ts rename apps/frontend/src/{shared => feature}/pagination/usePagination.tsx (100%) create mode 100644 apps/frontend/src/feature/user/component/User.tsx rename apps/frontend/src/feature/user/{component.tsx => component/UserInfoInputForm.tsx} (100%) create mode 100644 apps/frontend/src/feature/user/component/index.ts create mode 100644 apps/frontend/src/feature/user/model.ts delete mode 100644 apps/frontend/src/feature/user/type.ts delete mode 100644 apps/frontend/src/shared/pagination/type.ts diff --git a/apps/frontend/src/app/main.tsx b/apps/frontend/src/app/main.tsx index 3a9f29db..eb53c5e3 100644 --- a/apps/frontend/src/app/main.tsx +++ b/apps/frontend/src/app/main.tsx @@ -16,22 +16,20 @@ async function enableMocking() { return worker.start({ onUnhandledRequest: (request, print) => { if (!request.url.includes('/api/')) return; - print.warning(); } }); } +enableMocking(); -enableMocking().then(() => { - const root = ReactDOM.createRoot(document.getElementById('root')!); +const root = ReactDOM.createRoot(document.getElementById('root')!); - root.render( - - - - - - - - ); -}); +root.render( + + + + + + + +); diff --git a/apps/frontend/src/app/mock/lotusResolvers.ts b/apps/frontend/src/app/mock/lotusResolvers.ts index 34d9b0db..5aada82e 100644 --- a/apps/frontend/src/app/mock/lotusResolvers.ts +++ b/apps/frontend/src/app/mock/lotusResolvers.ts @@ -1,8 +1,9 @@ import { DefaultBodyType, HttpResponse, PathParams, StrictRequest } from 'msw'; import { MockRepository } from './MockRepository'; -import { LotusType } from '@/feature/lotus/type'; +import { LotusDto } from '@/feature/lotus'; +import { UserDto } from '@/feature/user'; -const lotusList = new MockRepository>(); +const lotusList = new MockRepository>(); insertLotus(); @@ -89,11 +90,12 @@ export const postCreateLotus = async ({ request }: { request: StrictRequest { const { id } = params; - const body = (await request.json()) as Partial; + const body = (await request.json()) as Partial; if (!id || typeof id !== 'string') return HttpResponse.json({ message: 'id is required' }); @@ -140,160 +142,182 @@ function insertLotus() { const jsImage = 'data:image/png;base64,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'; - const mockLotusData: LotusType[] = [ + const mockLotusData: (LotusDto & { author: UserDto })[] = [ { id: '1000000001', link: 'https://devblog.com/articles/1000000001', title: 'Understanding JavaScript Closures', logo: jsImage, - date: new Date('2024-11-01'), + date: new Date('2024-11-01').toISOString(), tags: ['JavaScript', 'Closures', 'Web Development'], author: { id: '1', nickname: 'js_master', - profile: 'https://devblog.com/authors/js_master' + profile: 'https://devblog.com/authors/js_master', + gistUrl: '' }, - isPublic: true + isPublic: true, + gistUrl: '' }, { id: '1000000002', link: 'https://devblog.com/articles/1000000002', title: 'A Guide to Responsive Design with CSS', logo: jsImage, - date: new Date('2024-10-28'), + date: new Date('2024-10-28').toISOString(), tags: ['CSS', 'Responsive Design', 'Frontend'], author: { id: '2', nickname: 'css_wizard', - profile: 'https://devblog.com/authors/css_wizard' + profile: 'https://devblog.com/authors/css_wizard', + gistUrl: '' }, - isPublic: true + isPublic: true, + gistUrl: '' }, { id: '1000000003', link: 'https://devblog.com/articles/1000000003', title: 'TypeScript vs JavaScript: Key Differences', logo: jsImage, - date: new Date('2024-10-25'), + date: new Date('2024-10-25').toISOString(), tags: ['TypeScript', 'JavaScript', 'Programming'], author: { id: '3', nickname: 'ts_guru', - profile: 'https://devblog.com/authors/ts_guru' + profile: 'https://devblog.com/authors/ts_guru', + gistUrl: '' }, - isPublic: true + isPublic: true, + gistUrl: '' }, { id: '1000000004', link: 'https://devblog.com/articles/1000000004', title: 'How to Build RESTful APIs with Node.js', logo: jsImage, - date: new Date('2024-10-20'), + date: new Date('2024-10-20').toISOString(), tags: ['Node.js', 'API', 'Backend'], author: { id: '4', nickname: 'node_dev', - profile: 'https://devblog.com/authors/node_dev' + profile: 'https://devblog.com/authors/node_dev', + gistUrl: '' }, - isPublic: false + isPublic: false, + gistUrl: '' }, { id: '1000000005', link: 'https://devblog.com/articles/1000000005', title: 'Top 10 Python Libraries for Data Science', logo: jsImage, - date: new Date('2024-10-15'), + date: new Date('2024-10-15').toISOString(), tags: ['Python', 'Data Science', 'Libraries'], author: { id: '5', nickname: 'data_scientist', - profile: 'https://devblog.com/authors/data_scientist' + profile: 'https://devblog.com/authors/data_scientist', + gistUrl: '' }, - isPublic: true + isPublic: true, + gistUrl: '' }, { id: '1000000006', link: 'https://devblog.com/articles/1000000006', title: 'React State Management: Context vs Redux', logo: jsImage, - date: new Date('2024-10-10'), + date: new Date('2024-10-10').toISOString(), tags: ['React', 'Redux', 'Frontend'], author: { id: '6', nickname: 'react_expert', - profile: 'https://devblog.com/authors/react_expert' + profile: 'https://devblog.com/authors/react_expert', + gistUrl: '' }, - isPublic: false + isPublic: false, + gistUrl: '' }, { id: '1000000007', link: 'https://devblog.com/articles/1000000007', title: 'Mastering Git: Branching and Merging', logo: jsImage, - date: new Date('2024-10-05'), + date: new Date('2024-10-05').toISOString(), tags: ['Git', 'Version Control', 'DevOps'], author: { id: '7', nickname: 'git_master', - profile: 'https://devblog.com/authors/git_master' + profile: 'https://devblog.com/authors/git_master', + gistUrl: '' }, - isPublic: true + isPublic: true, + gistUrl: '' }, { id: '1000000008', link: 'https://devblog.com/articles/1000000008', title: 'Introduction to Kubernetes for Beginners', logo: jsImage, - date: new Date('2024-10-01'), + date: new Date('2024-10-01').toISOString(), tags: ['Kubernetes', 'DevOps', 'Containers'], author: { id: '8', nickname: 'k8s_pro', - profile: 'https://devblog.com/authors/k8s_pro' + profile: 'https://devblog.com/authors/k8s_pro', + gistUrl: '' }, - isPublic: true + isPublic: true, + gistUrl: '' }, { id: '1000000009', link: 'https://devblog.com/articles/1000000009', title: 'Building Scalable Microservices with Spring Boot', logo: jsImage, - date: new Date('2024-09-25'), + date: new Date('2024-09-25').toISOString(), tags: ['Spring Boot', 'Microservices', 'Backend'], author: { id: '9', nickname: 'spring_dev', - profile: 'https://devblog.com/authors/spring_dev' + profile: 'https://devblog.com/authors/spring_dev', + gistUrl: '' }, - isPublic: false + isPublic: false, + gistUrl: '' }, { id: '1000000010', link: 'https://devblog.com/articles/1000000010', title: 'GraphQL Basics: Query Language for APIs', logo: jsImage, - date: new Date('2024-09-20'), + date: new Date('2024-09-20').toISOString(), tags: ['GraphQL', 'API', 'Web Development'], author: { id: '10', nickname: 'graphql_guru', - profile: 'https://devblog.com/authors/graphql_guru' + profile: 'https://devblog.com/authors/graphql_guru', + gistUrl: '' }, - isPublic: true + isPublic: true, + gistUrl: '' }, { id: '1000000011', link: 'https://devblog.com/articles/1000000011', title: 'Understanding Docker: A Comprehensive Guide', logo: jsImage, - date: new Date('2024-09-15'), + date: new Date('2024-09-15').toISOString(), tags: ['Docker', 'DevOps', 'Containers'], author: { id: '11', nickname: 'docker_wizard', - profile: 'https://devblog.com/authors/docker_wizard' + profile: 'https://devblog.com/authors/docker_wizard', + gistUrl: '' }, - isPublic: true + isPublic: true, + gistUrl: '' } ]; mockLotusData.forEach((lotus) => { diff --git a/apps/frontend/src/feature/codeView/component/CodeViewProvider.tsx b/apps/frontend/src/feature/codeView/component/CodeViewProvider.tsx index c6f9d0f0..e148ec34 100644 --- a/apps/frontend/src/feature/codeView/component/CodeViewProvider.tsx +++ b/apps/frontend/src/feature/codeView/component/CodeViewProvider.tsx @@ -1,9 +1,9 @@ import { useState } from 'react'; import { CodeViewActionContext, CodeViewContext } from '@/feature/codeView/hook'; -import { CodeViewValue } from '@/feature/codeView/type'; +import { CodeFileModel } from '@/feature/codeView/model'; type CodeViewProviderProps = { - value: CodeViewValue[]; + value: CodeFileModel[]; children: React.ReactNode; current?: number; }; diff --git a/apps/frontend/src/feature/codeView/component/CodeViewer.tsx b/apps/frontend/src/feature/codeView/component/CodeViewer.tsx index c67d4ba5..54000e56 100644 --- a/apps/frontend/src/feature/codeView/component/CodeViewer.tsx +++ b/apps/frontend/src/feature/codeView/component/CodeViewer.tsx @@ -9,64 +9,16 @@ type CodeViewerProps = { theme?: 'github-light' | 'github-dark'; } & HTMLProps; -const LANGUAGES_EXT = { - TypeScript: 'ts', - ts: 'ts', - Ts: 'ts', - JavaScript: 'js', - Js: 'js', - js: 'js', - json: 'json', - JSON: 'json' -} as const; - -const CANT_VIEW_EXT = [ - 'png', - 'jpg', - 'jpeg', - 'gif', - 'svg', - 'bmp', - 'webp', - 'ico', - 'tiff', - 'tif', - 'raw', - 'heif', - 'heic', - 'apng', - 'avif', - 'jxl', - 'mp4', - 'mov', - 'avi', - 'wmv', - 'flv', - 'mkv', - 'webm' -]; - -const getCode = (ext: string): (typeof LANGUAGES_EXT)[keyof typeof LANGUAGES_EXT] | undefined => { - return LANGUAGES_EXT[ext as keyof typeof LANGUAGES_EXT]; -}; - // TODO : 아주 막연하게 구현된 컴포넌트, 추후에 스타일 리팩터링 필요 export function CodeViewer({ className, ...props }: CodeViewerProps) { const { value, current } = useCodeViewContext(); const file = value[current]; - const content = file?.content || ''; - const filename = file?.filename || ''; - const ext = filename.split('.')?.pop() || ''; - - const language = getCode(ext); - - const markdown = language ? `\`\`\`${language}\n${file.content}\n \`\`\`` : content; - if (CANT_VIEW_EXT.includes(ext)) + if (!file.canView) return (
- {filename} + {file.filename} 지원하지 않는 확장자입니다.
); @@ -75,13 +27,13 @@ export function CodeViewer({ className, ...props }: CodeViewerProps) { figure]:h-full [&>figure]:w-full [&>figure>pre]:h-full [&>figure>pre]:w-full [&>figure>pre]:m-0' : 'p-2', 'overflow-scroll', className )} - markdown={markdown} + markdown={file.toMarkdown()} {...props} /> ); diff --git a/apps/frontend/src/feature/codeView/constant.ts b/apps/frontend/src/feature/codeView/constant.ts new file mode 100644 index 00000000..7bd8f26f --- /dev/null +++ b/apps/frontend/src/feature/codeView/constant.ts @@ -0,0 +1,45 @@ +export const LANGUAGES_EXT = { + TypeScript: 'ts', + ts: 'ts', + Ts: 'ts', + JavaScript: 'js', + Js: 'js', + js: 'js', + json: 'json', + JSON: 'json', + jsx: 'jsx', + tsx: 'tsx', + css: 'css', + scss: 'scss', + sass: 'sass', + html: 'html', + babelrc: 'json', + prettierrc: 'json', + eslintrc: 'json' +} as const; + +export const CANT_VIEW_EXT = [ + 'png', + 'jpg', + 'jpeg', + 'gif', + 'svg', + 'bmp', + 'webp', + 'ico', + 'tiff', + 'tif', + 'raw', + 'heif', + 'heic', + 'apng', + 'avif', + 'jxl', + 'mp4', + 'mov', + 'avi', + 'wmv', + 'flv', + 'mkv', + 'webm' +]; diff --git a/apps/frontend/src/feature/codeView/hook.ts b/apps/frontend/src/feature/codeView/hook.ts index c0a664f8..2c5b401f 100644 --- a/apps/frontend/src/feature/codeView/hook.ts +++ b/apps/frontend/src/feature/codeView/hook.ts @@ -1,8 +1,8 @@ import { createContext, useContext } from 'react'; -import { CodeViewValue } from '.'; +import { CodeFileModel } from '.'; export interface CodeViewContext { - value: CodeViewValue[]; + value: CodeFileModel[]; current: number; } export type CodeViewActionContext = (arg: number) => void; diff --git a/apps/frontend/src/feature/codeView/index.ts b/apps/frontend/src/feature/codeView/index.ts index 10aec7f2..cd9ca1c0 100644 --- a/apps/frontend/src/feature/codeView/index.ts +++ b/apps/frontend/src/feature/codeView/index.ts @@ -1,2 +1,2 @@ -export * from './type'; export * from './component'; +export * from './model'; diff --git a/apps/frontend/src/feature/codeView/model.ts b/apps/frontend/src/feature/codeView/model.ts new file mode 100644 index 00000000..e15d6bd6 --- /dev/null +++ b/apps/frontend/src/feature/codeView/model.ts @@ -0,0 +1,52 @@ +import { CANT_VIEW_EXT, LANGUAGES_EXT } from './constant'; + +export interface CodeFileDto { + filename: string; + language: string; + content: string; +} + +export class CodeFileModel { + public filename: string; + public language: string; + public content: string; + public ext: string; + + constructor(dto: CodeFileDto) { + this.filename = dto?.filename || ''; + this.language = dto?.language || ''; + this.content = dto?.content || ''; + this.ext = dto.filename.split('.').pop() || ''; + } + + static getDefaultFile(list: CodeFileModel[]) { + const readme = CodeFileModel.getREADME(list); + const md = list.find((file) => file.isMarkdown); + + return readme || md; + } + + static getREADME(list: CodeFileModel[]) { + return list.find((file) => file.isREADME); + } + + get isREADME() { + return this.filename === 'README.md'; + } + + get isMarkdown() { + return this.ext === 'md'; + } + + get isCode() { + return this.ext in LANGUAGES_EXT; + } + + get canView() { + return !CANT_VIEW_EXT.includes(this.ext); + } + + toMarkdown() { + return this.isCode ? `\`\`\`${this.ext}\n${this.content}\n \`\`\`` : this.content; + } +} diff --git a/apps/frontend/src/feature/codeView/type.ts b/apps/frontend/src/feature/codeView/type.ts deleted file mode 100644 index 0f985b88..00000000 --- a/apps/frontend/src/feature/codeView/type.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface CodeViewValue { - filename: string; - language: string; - content: string; -} diff --git a/apps/frontend/src/feature/history/api.ts b/apps/frontend/src/feature/history/api.ts index 4eeea5b5..4f4cb01d 100644 --- a/apps/frontend/src/feature/history/api.ts +++ b/apps/frontend/src/feature/history/api.ts @@ -1,31 +1,27 @@ -import { HistoryType } from '.'; +import { HistoryDto, HistoryModel } from '.'; +import { PageDto, PageModel } from '@/feature/pagination'; import { api } from '@/shared/common/api'; -export const getLotusHistoryList = async ({ - id, - page = 1 -}: { - id: string; - page?: number; -}): Promise<{ list: HistoryType[]; page: { current: number; max: number } }> => { - const response = await api.get(`/api/lotus/${id}/history?page=${page}&size=${5}`); +interface LotusHistoryListDto { + list: HistoryDto[]; + page: PageDto; +} - const data = response.data as { list: HistoryType[]; page: { current: number; max: number } }; +export const getLotusHistoryList = async ({ id, page = 1 }: { id: string; page?: number }) => { + const response = await api.get(`/api/lotus/${id}/history?page=${page}&size=${5}`); - const body = { - ...data, - list: data.list.map(({ date, ...rest }) => ({ ...rest, date: new Date(date) })) - }; + const list = response.data.list.map((history) => new HistoryModel(history)); - return body; + return { + list, + page: new PageModel(response.data.page) + }; }; -export const getLotusHistory = async ({ id, historyId }: { id: string; historyId: string }): Promise => { - const response = await api.get(`/api/lotus/${id}/history/${historyId}`); - - const data = response.data as HistoryType; +export const getLotusHistory = async ({ id, historyId }: { id: string; historyId: string }) => { + const { data } = await api.get(`/api/lotus/${id}/history/${historyId}`); - return data; + return new HistoryModel(data); }; export interface PostCodeRunProps { diff --git a/apps/frontend/src/feature/history/component.tsx b/apps/frontend/src/feature/history/component.tsx index d5548dab..377d7bf8 100644 --- a/apps/frontend/src/feature/history/component.tsx +++ b/apps/frontend/src/feature/history/component.tsx @@ -2,10 +2,10 @@ import { ComponentProps, HTMLProps, createContext, useContext } from 'react'; import { Heading, Text } from '@froxy/design/components'; import { cn } from '@froxy/design/utils'; import { HISTORY_STATUS_COLOR } from './constant'; -import { HistoryType } from './type'; +import { HistoryModel } from './model'; import { FormatDateKey, Time } from '@/shared'; -const HistoryContext = createContext(null); +const HistoryContext = createContext(null); const useHistoryContext = () => { const context = useContext(HistoryContext); @@ -19,7 +19,7 @@ const useHistoryContext = () => { type HistoryProviderProps = { children: React.ReactNode; - value: HistoryType; + value: HistoryModel; }; export function HistoryProvider({ children, value }: HistoryProviderProps) { diff --git a/apps/frontend/src/feature/history/index.ts b/apps/frontend/src/feature/history/index.ts index 5c48d07d..24b10931 100644 --- a/apps/frontend/src/feature/history/index.ts +++ b/apps/frontend/src/feature/history/index.ts @@ -2,3 +2,4 @@ export * from './component'; export * from './api'; export * from './constant'; export * from './type'; +export * from './model'; diff --git a/apps/frontend/src/feature/history/model.ts b/apps/frontend/src/feature/history/model.ts new file mode 100644 index 00000000..14689f1a --- /dev/null +++ b/apps/frontend/src/feature/history/model.ts @@ -0,0 +1,41 @@ +import { HISTORY_STATUS } from './constant'; +import { HistoryStatus } from './type'; + +export interface HistoryDto { + id: string; + status: string; + date: string; + input: string; + output: string; + filename: string; +} + +export class HistoryModel { + public id: string; + public status: HistoryStatus; + public date: Date; + public input: string; + public output: string; + public filename: string; + + constructor(dto: HistoryDto) { + this.id = dto.id; + this.status = HistoryModel.isValidState(dto.status) ? dto.status : HISTORY_STATUS.ERROR; + this.date = new Date(dto.date); + this.input = dto.input; + this.output = dto.output; + this.filename = dto.filename; + } + + static isValidState(status: string): status is HistoryStatus { + return Object.values(HISTORY_STATUS).includes(status as HistoryStatus); + } + + static getPendingHistoriesId(histories: HistoryModel[]) { + return histories.filter((history) => history.isStatus(HISTORY_STATUS.PENDING)).map((history) => history.id); + } + + isStatus(status: HistoryStatus) { + return this.status === status; + } +} diff --git a/apps/frontend/src/feature/history/type.ts b/apps/frontend/src/feature/history/type.ts index 218d6629..f9bcb7e4 100644 --- a/apps/frontend/src/feature/history/type.ts +++ b/apps/frontend/src/feature/history/type.ts @@ -1,12 +1,3 @@ import { HISTORY_STATUS } from './constant'; export type HistoryStatus = (typeof HISTORY_STATUS)[keyof typeof HISTORY_STATUS]; - -export interface HistoryType { - id: string; - status: HistoryStatus; - filename: string; - input: string; - output: string; - date: Date; -} diff --git a/apps/frontend/src/feature/lotus/api.ts b/apps/frontend/src/feature/lotus/api.ts index 1ab9fb6a..7cb7426d 100644 --- a/apps/frontend/src/feature/lotus/api.ts +++ b/apps/frontend/src/feature/lotus/api.ts @@ -1,37 +1,56 @@ -import { LotusType } from './type'; -import { CodeViewValue } from '@/feature/codeView'; +import { LotusDto, LotusModel } from './model'; +import { CodeFileDto, CodeFileModel } from '@/feature/codeView'; +import { PageDto } from '@/feature/pagination'; +import { UserDto, UserModel } from '@/feature/user/model'; import { api } from '@/shared/common/api'; -import { PageType } from '@/shared/pagination'; + +interface LotusListDto { + lotuses: (LotusDto & { author: UserDto })[]; + page: PageDto; +} + +export interface LotusDetailModel { + lotus: LotusModel; + author: UserModel; + language: string; + files: CodeFileModel[]; +} export const getLotusList = async ({ page = 1, keyword }: { page?: number; keyword?: string }) => { - const response = await api.get(`/api/lotus?page=${page}&size=${9}${keyword ? `&search=${keyword}` : ''}`); + const response = await api.get( + `/api/lotus?page=${page}&size=${9}${keyword ? `&search=${keyword}` : ''}` + ); - const lotuses: LotusType[] = response.data.lotuses.map((lotus: LotusType) => ({ - ...lotus, - date: new Date(lotus.date) + const lotuses = response.data.lotuses.map((lotus) => ({ + lotus: new LotusModel(lotus), + author: new UserModel(lotus.author) })); - return { lotuses, page: response.data.page as PageType }; + return { lotuses, page: response.data.page }; }; -export const getLotusDetail = async ({ - id -}: { - id: string; -}): Promise => { - const response = await api.get(`/api/lotus/${id}`); +type LotusDetailDto = LotusDto & { files: CodeFileDto[] } & { language: string } & { author: UserDto }; - const data = await response.data; +export const getLotusDetail = async ({ id }: { id: string }) => { + const response = await api.get(`/api/lotus/${id}`); - return { ...data, date: new Date(data.date) }; + const data = response.data; + + const lotus = new LotusModel(data); + const language = data.language; + const files = data.files.map((file) => new CodeFileModel(file)); + const author = new UserModel(data.author); + + return { + lotus, + author, + language, + files + }; }; -export const deleteLotus = async ({ - id -}: { - id: string; -}): Promise => { - const response = await api.delete(`/api/lotus/${id}`); +export const deleteLotus = async ({ id }: { id: string }) => { + const response = await api.delete(`/api/lotus/${id}`); const data = response.data; @@ -44,16 +63,10 @@ interface UpdateLotusDto { isPublic?: boolean; } -export const updateLotus = async ({ - id, - body -}: { - id: string; - body: UpdateLotusDto; -}): Promise => { - const response = await api.patch(`/api/lotus/${id}`, body); +export const updateLotus = async ({ id, body }: { id: string; body: UpdateLotusDto }) => { + const response = await api.patch(`/api/lotus/${id}`, body); - const data = await response.data; + const data = response.data; return data; }; @@ -65,14 +78,13 @@ interface CreateLotusDto { gistUuid: string; } -export const createLotus = async ({ - body -}: { - body: CreateLotusDto; -}): Promise => { - const response = await api.post(`/api/lotus`, body); +export const createLotus = async ({ body }: { body: CreateLotusDto }) => { + const response = await api.post(`/api/lotus`, body); - const data = await response.data; + const data = response.data; - return data; + return { + lotus: new LotusModel(data), + author: new UserModel(data.author) + }; }; diff --git a/apps/frontend/src/feature/lotus/component.tsx b/apps/frontend/src/feature/lotus/component.tsx index f65f59a2..ac10603b 100644 --- a/apps/frontend/src/feature/lotus/component.tsx +++ b/apps/frontend/src/feature/lotus/component.tsx @@ -2,10 +2,12 @@ import { ComponentProps, HTMLProps, createContext, useContext } from 'react'; import { Badge, Text } from '@froxy/design/components'; import { cn } from '@froxy/design/utils'; import { Link } from '@tanstack/react-router'; -import { BadgeVariantType, LotusType } from '@/feature/lotus/type'; +import { FaGithub } from 'react-icons/fa'; +import { LotusModel } from '.'; +import { BadgeVariantType } from '@/feature/lotus/type'; import { Time } from '@/shared'; -const lotusContext = createContext(null); +const lotusContext = createContext(null); export const useLotusContext = () => { const lotus = useContext(lotusContext); @@ -27,19 +29,6 @@ export function LotusTitle(props: LotusTitleProps) { ); } -type LotusAuthorProps = ComponentProps; - -export function LotusAuthor(props: LotusAuthorProps) { - const { author } = useLotusContext(); - - // TODO: 해당 사용자의 마이페이지로 이동하기 - return ( - - {author.nickname} - - ); -} - type LotusTagListProps = HTMLProps & { variant?: BadgeVariantType; }; @@ -81,25 +70,29 @@ export function LotusLink({ children, className }: LotusLinkProps) { ); } -type LotusLogoProps = HTMLProps; - -export function LotusLogo({ className, ...props }: LotusLogoProps) { - const { title, author } = useLotusContext(); +type LotusGistLinkProps = { + className?: string; + size?: number; +}; - const image = author?.profile || '/image/logoIcon.svg'; +export function LotusGistLink({ className, size }: LotusGistLinkProps) { + const { gistUrl } = useLotusContext(); - return {title}; + return ( +
+ + + ); } -export function LotusProvider({ children, lotus }: { children: React.ReactNode; lotus: LotusType }) { +export function LotusProvider({ children, lotus }: { children: React.ReactNode; lotus: LotusModel }) { return {children}; } export const Lotus = Object.assign(LotusProvider, { Title: LotusTitle, - Author: LotusAuthor, - Logo: LotusLogo, CreateDate: LotusCreateDate, TagList: LotusTagList, - Link: LotusLink + Link: LotusLink, + GistLink: LotusGistLink }); diff --git a/apps/frontend/src/feature/lotus/index.ts b/apps/frontend/src/feature/lotus/index.ts index c79ed10f..03d1f356 100644 --- a/apps/frontend/src/feature/lotus/index.ts +++ b/apps/frontend/src/feature/lotus/index.ts @@ -3,3 +3,4 @@ export * from './component'; export * from './type'; export * from './api'; export * from './util'; +export * from './model'; diff --git a/apps/frontend/src/feature/lotus/model.ts b/apps/frontend/src/feature/lotus/model.ts new file mode 100644 index 00000000..adf69504 --- /dev/null +++ b/apps/frontend/src/feature/lotus/model.ts @@ -0,0 +1,47 @@ +export interface LotusDto { + id: string; + link: string; + title: string; + logo: string; + date: string; + tags: string[]; + isPublic?: boolean; + gistUrl: string; +} + +export class LotusModel { + public id: string; + public link: string; + public title: string; + public logo: string; + public date: Date; + public tags: string[]; + public isPublic?: boolean; + public gistUrl: string; + + constructor(dto: LotusDto) { + this.id = dto.id; + this.link = dto.link; + this.title = dto.title; + this.logo = dto.logo; + this.date = new Date(dto.date); + this.tags = dto.tags; + this.isPublic = dto.isPublic; + this.gistUrl = dto.gistUrl; + } + + clone(data: Partial) { + const { date, ...modelData } = this; + const { date: updateDate, ...update } = data; + + return new LotusModel({ + ...modelData, + date: updateDate?.toISOString() || date.toISOString(), + ...update + }); + } + + get isTagsEmpty() { + return this.tags.length < 1; + } +} diff --git a/apps/frontend/src/feature/lotus/type.ts b/apps/frontend/src/feature/lotus/type.ts index 9acd8a94..b8fc377c 100644 --- a/apps/frontend/src/feature/lotus/type.ts +++ b/apps/frontend/src/feature/lotus/type.ts @@ -1,14 +1 @@ -import { UserType } from '@/feature/user/type'; - -export interface LotusType { - id: string; - link: string; - title: string; - logo: string; - date: Date; - tags: string[]; - author: UserType; - isPublic?: boolean; -} - export type BadgeVariantType = 'default' | 'secondary' | 'destructive' | 'outline' | null | undefined; diff --git a/apps/frontend/src/shared/pagination/Pagination.tsx b/apps/frontend/src/feature/pagination/Pagination.tsx similarity index 96% rename from apps/frontend/src/shared/pagination/Pagination.tsx rename to apps/frontend/src/feature/pagination/Pagination.tsx index 59a40c8c..4b612bd5 100644 --- a/apps/frontend/src/shared/pagination/Pagination.tsx +++ b/apps/frontend/src/feature/pagination/Pagination.tsx @@ -8,8 +8,8 @@ import { PaginationPrevious } from '@froxy/design/components'; import { Skeleton } from '@froxy/design/components'; +import { usePagination } from '@/feature/pagination/usePagination'; import { range } from '@/shared/common'; -import { usePagination } from '@/shared/pagination/usePagination'; interface PaginationProps { totalPages?: number; diff --git a/apps/frontend/src/shared/pagination/index.ts b/apps/frontend/src/feature/pagination/index.ts similarity index 100% rename from apps/frontend/src/shared/pagination/index.ts rename to apps/frontend/src/feature/pagination/index.ts diff --git a/apps/frontend/src/feature/pagination/type.ts b/apps/frontend/src/feature/pagination/type.ts new file mode 100644 index 00000000..5ea69d64 --- /dev/null +++ b/apps/frontend/src/feature/pagination/type.ts @@ -0,0 +1,14 @@ +export interface PageDto { + current: number; + max: number; +} + +export class PageModel { + public current: number; + public max: number; + + constructor(dto: PageDto) { + this.current = dto.current; + this.max = dto.max; + } +} diff --git a/apps/frontend/src/shared/pagination/usePagination.tsx b/apps/frontend/src/feature/pagination/usePagination.tsx similarity index 100% rename from apps/frontend/src/shared/pagination/usePagination.tsx rename to apps/frontend/src/feature/pagination/usePagination.tsx diff --git a/apps/frontend/src/feature/user/api.ts b/apps/frontend/src/feature/user/api.ts index cbab3aac..dd696bc9 100644 --- a/apps/frontend/src/feature/user/api.ts +++ b/apps/frontend/src/feature/user/api.ts @@ -1,18 +1,24 @@ -import { UserType } from './type'; -import { LotusType } from '@/feature/lotus/type'; +import { UserDto, UserModel } from './model'; +import { CodeFileDto, CodeFileModel } from '@/feature/codeView'; +import { LotusDto, LotusModel } from '@/feature/lotus'; +import { PageDto } from '@/feature/pagination'; import { api } from '@/shared/common/api'; -import { PageType } from '@/shared/pagination'; + +interface UserLotusListDto { + lotuses: (LotusDto & { author: UserDto })[]; + page: PageDto; +} // 사용자의 Lotus 목록 조회 export const getUserLotusList = async ({ page = 1, size = 6 }: { page?: number; size?: number }) => { - const response = await api.get(`/api/user/lotus?page=${page}&size=${size}`); + const response = await api.get(`/api/user/lotus?page=${page}&size=${size}`); - const lotuses: LotusType[] = response.data.lotuses.map((lotus: LotusType) => ({ - ...lotus, - date: new Date(lotus.date) + const lotuses = response.data.lotuses.map((lotus) => ({ + lotus: new LotusModel(lotus), + author: new UserModel(lotus.author) })); - return { lotuses, page: response.data.page as PageType }; + return { lotuses, page: response.data.page }; }; interface GistType { @@ -21,7 +27,7 @@ interface GistType { nickname: string; } -interface UserGistListResponse { +interface UserGistListDto { gists: GistType[]; page: number; size: number; @@ -30,27 +36,25 @@ interface UserGistListResponse { // 사용자의 Gist 목록 조회 export const getUserGistList = async ({ page = 1, size = 10 }: { page?: number; size?: number }) => { - const response = await api.get(`/api/user/gist?page=${page}&size=${size}`); + const response = await api.get(`/api/user/gist?page=${page}&size=${size}`); const data = response.data; - return data as UserGistListResponse; + return data; }; // TODO : Gist Feature 분리 고려 // 특정 gist의 파일 조회 -interface GistFileType { - filename: string; - language: string; - content: string; +interface GistFilesDto { + files: CodeFileDto[]; } export const getUserGistFile = async ({ gistId }: { gistId: string }) => { - const response = await api.get(`/api/user/gist/${gistId}`); + const response = await api.get(`/api/user/gist/${gistId}`); - const { files } = await response.data; + const { files } = response.data; - return files as GistFileType[]; + return files.map((file) => new CodeFileModel(file)); }; export const postLogin = async () => { @@ -63,17 +67,17 @@ export const postLogin = async () => { //사용자 기본 정보 조회 export const getUserInfo = async () => { - const res = await api.get('/api/user'); + const res = await api.get('/api/user'); - return res.data; + return new UserModel(res.data); }; -interface PatchUserInfo { +interface UpdateUserDto { nickname: string; } // 사용자 정보 수정하기 -export const patchUserInfo = async ({ body }: { body: PatchUserInfo }) => { +export const patchUserInfo = async ({ body }: { body: UpdateUserDto }) => { const res = await api.patch('/api/user', body); return res.data; diff --git a/apps/frontend/src/feature/user/component/User.tsx b/apps/frontend/src/feature/user/component/User.tsx new file mode 100644 index 00000000..ac16fda9 --- /dev/null +++ b/apps/frontend/src/feature/user/component/User.tsx @@ -0,0 +1,60 @@ +import { ComponentProps, HTMLProps, createContext, useContext } from 'react'; +import { Link } from '@tanstack/react-router'; +import { Text } from '@/components'; +import { UserModel } from '@/feature/user/model'; +import { cn } from '@/index'; + +const UserContext = createContext(null); + +const useUserContext = () => { + const user = useContext(UserContext); + + if (!user) throw new Error('User context is not provided'); + + return user; +}; + +type UserNameProps = ComponentProps; + +export function UserName(props: UserNameProps) { + const { nickname } = useUserContext(); + + // TODO: 해당 사용자의 마이페이지로 이동하기 + return ( + + {nickname} + + ); +} + +type UserAvatarProps = HTMLProps; + +export function UserAvatar({ className, ...props }: UserAvatarProps) { + const { profile, nickname } = useUserContext(); + + const image = profile; + + return {nickname}; +} + +type UserLinkProps = { + children: React.ReactNode; + className?: string; +}; + +// TODO: 해당 사용자의 마이페이지로 이동하기 +export function UserLink(props: UserLinkProps) { + // const { id } = useUserContext(); + + return ; +} + +export function UserProvider({ user, children }: { user: UserModel; children: React.ReactNode }) { + return {children}; +} + +export const User = Object.assign(UserProvider, { + Avatar: UserAvatar, // + Link: UserLink, + Name: UserName +}); diff --git a/apps/frontend/src/feature/user/component.tsx b/apps/frontend/src/feature/user/component/UserInfoInputForm.tsx similarity index 100% rename from apps/frontend/src/feature/user/component.tsx rename to apps/frontend/src/feature/user/component/UserInfoInputForm.tsx diff --git a/apps/frontend/src/feature/user/component/index.ts b/apps/frontend/src/feature/user/component/index.ts new file mode 100644 index 00000000..4c1dd04e --- /dev/null +++ b/apps/frontend/src/feature/user/component/index.ts @@ -0,0 +1,2 @@ +export * from './User'; +export * from './UserInfoInputForm'; diff --git a/apps/frontend/src/feature/user/index.ts b/apps/frontend/src/feature/user/index.ts index ad5bdb90..668e06c2 100644 --- a/apps/frontend/src/feature/user/index.ts +++ b/apps/frontend/src/feature/user/index.ts @@ -1,5 +1,5 @@ export * from './api'; export * from './component'; export * from './query'; -export * from './type'; export * from './util'; +export * from './model'; diff --git a/apps/frontend/src/feature/user/model.ts b/apps/frontend/src/feature/user/model.ts new file mode 100644 index 00000000..87472da7 --- /dev/null +++ b/apps/frontend/src/feature/user/model.ts @@ -0,0 +1,20 @@ +export interface UserDto { + id: string; + nickname: string; + profile: string; + gistUrl: string; +} + +export class UserModel { + public id: string; + public nickname: string; + public profile: string; + public gistUrl: string; + + constructor(dto: UserDto) { + this.id = dto.id; + this.nickname = dto.nickname; + this.profile = dto.profile || '/image/logoIcon.svg'; + this.gistUrl = dto.gistUrl; + } +} diff --git a/apps/frontend/src/feature/user/type.ts b/apps/frontend/src/feature/user/type.ts deleted file mode 100644 index e3aa9ae1..00000000 --- a/apps/frontend/src/feature/user/type.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface UserType { - id: string; - nickname: string; - profile: string; -} diff --git a/apps/frontend/src/feature/user/util.ts b/apps/frontend/src/feature/user/util.ts index c76d68c6..6cdc3b97 100644 --- a/apps/frontend/src/feature/user/util.ts +++ b/apps/frontend/src/feature/user/util.ts @@ -1,10 +1,9 @@ import { userQueryOptions } from './query'; import { queryClient } from '@/app/query'; -import { UserType } from '@/feature/user/type'; export const isAuthUser = async () => { try { - const user = await queryClient.fetchQuery(userQueryOptions.info()); + const user = await queryClient.fetchQuery(userQueryOptions.info()); return !!user?.id && !!user?.nickname && !!user?.profile; } catch { diff --git a/apps/frontend/src/page/(main)/route.lazy.tsx b/apps/frontend/src/page/(main)/route.lazy.tsx index da414d25..4183c29b 100644 --- a/apps/frontend/src/page/(main)/route.lazy.tsx +++ b/apps/frontend/src/page/(main)/route.lazy.tsx @@ -9,7 +9,7 @@ function RouteComponent() { return (
-
+
diff --git a/apps/frontend/src/shared/pagination/type.ts b/apps/frontend/src/shared/pagination/type.ts deleted file mode 100644 index a6cb9cf7..00000000 --- a/apps/frontend/src/shared/pagination/type.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface PageType { - current: number; - max: number; -} diff --git a/apps/frontend/src/widget/SuspensePagination.tsx b/apps/frontend/src/widget/SuspensePagination.tsx index 30eca5d5..9990aa79 100644 --- a/apps/frontend/src/widget/SuspensePagination.tsx +++ b/apps/frontend/src/widget/SuspensePagination.tsx @@ -1,5 +1,5 @@ import { useSuspenseQuery } from '@tanstack/react-query'; -import { Pagination } from '@/shared/pagination'; +import { Pagination } from '@/feature/pagination'; interface Page { max: number; diff --git a/apps/frontend/src/widget/history/HistoryTrigger.tsx b/apps/frontend/src/widget/history/HistoryTrigger.tsx index a018fe95..9704330e 100644 --- a/apps/frontend/src/widget/history/HistoryTrigger.tsx +++ b/apps/frontend/src/widget/history/HistoryTrigger.tsx @@ -1,7 +1,7 @@ import { Text } from '@froxy/design/components'; -import { History, HistoryType } from '@/feature/history'; +import { History, HistoryModel } from '@/feature/history'; -export function HistoryTrigger({ history }: { history: HistoryType }) { +export function HistoryTrigger({ history }: { history: HistoryModel }) { return (
diff --git a/apps/frontend/src/widget/history/SuspenseLotusHistoryList.tsx b/apps/frontend/src/widget/history/SuspenseLotusHistoryList.tsx index b870b5da..5aebf007 100644 --- a/apps/frontend/src/widget/history/SuspenseLotusHistoryList.tsx +++ b/apps/frontend/src/widget/history/SuspenseLotusHistoryList.tsx @@ -12,6 +12,7 @@ import { useQueryErrorResetBoundary, useSuspenseQuery } from '@tanstack/react-qu import axios from 'axios'; import { HistoryTrigger } from './HistoryTrigger'; import { SuspenseLotusHistoryDetail } from './SuspenseLotusHistoryDetail'; +import { HistoryModel } from '@/feature/history'; import { lotusHistoryQueryOptions } from '@/feature/history/query'; import { range } from '@/shared'; import { AsyncBoundary } from '@/shared/boundary'; @@ -21,7 +22,7 @@ export function SuspenseLotusHistoryList({ id, page = 1 }: { id: string; page?: data: { list } } = useSuspenseQuery(lotusHistoryQueryOptions.list({ id, page })); - const pendingHistoriesId = list.filter((history) => history.status === 'PENDING').map((history) => history.id); + const pendingHistoriesId = HistoryModel.getPendingHistoriesId(list); const firstPageFirstItem = page === 1 ? [list[0]?.id] : []; diff --git a/apps/frontend/src/widget/lotusCreate/LotusCreateForm.tsx b/apps/frontend/src/widget/lotusCreate/LotusCreateForm.tsx index 6c83021d..a9f19c87 100644 --- a/apps/frontend/src/widget/lotusCreate/LotusCreateForm.tsx +++ b/apps/frontend/src/widget/lotusCreate/LotusCreateForm.tsx @@ -40,8 +40,8 @@ export function LotusCreateForm() { body: formValue }, { - onSuccess: ({ id }) => { - navigate({ to: `/lotus/$lotusId`, params: { lotusId: id } }); + onSuccess: ({ lotus }) => { + navigate({ to: `/lotus/$lotusId`, params: { lotusId: lotus.id } }); toast({ description: 'Lotus가 생성되었습니다.', variant: 'success', duration: 2000 }); }, diff --git a/apps/frontend/src/widget/lotusCreate/SuspenseGistFiles.tsx b/apps/frontend/src/widget/lotusCreate/SuspenseGistFiles.tsx index 1999be6b..13837c59 100644 --- a/apps/frontend/src/widget/lotusCreate/SuspenseGistFiles.tsx +++ b/apps/frontend/src/widget/lotusCreate/SuspenseGistFiles.tsx @@ -2,17 +2,18 @@ import { DotLottieReact } from '@lottiefiles/dotlottie-react'; import { useQueryErrorResetBoundary, useSuspenseQuery } from '@tanstack/react-query'; import axios from 'axios'; import { Button, Heading, Skeleton } from '@/components'; -import { CodeView } from '@/feature/codeView'; +import { CodeFileModel, CodeView } from '@/feature/codeView'; import { userQueryOptions } from '@/feature/user/query'; import '@/app/style/github.css'; export function SuspenseGistFiles({ gistId }: { gistId: string }) { const { data: files } = useSuspenseQuery(userQueryOptions.gistFile({ gistId })); - const defaultIndex = files.findIndex(({ filename }) => filename === 'README.md') || 0; + const defaultFile = CodeFileModel.getDefaultFile(files); + const defaultFileIndex = defaultFile ? files.findIndex((file) => defaultFile?.filename === file.filename) : 0; return ( - +
diff --git a/apps/frontend/src/widget/lotusDetail/SuspenseLotusDetail.tsx b/apps/frontend/src/widget/lotusDetail/SuspenseLotusDetail.tsx index b295e558..57af8a4f 100644 --- a/apps/frontend/src/widget/lotusDetail/SuspenseLotusDetail.tsx +++ b/apps/frontend/src/widget/lotusDetail/SuspenseLotusDetail.tsx @@ -1,33 +1,35 @@ import { Skeleton } from '@froxy/design/components'; -import { useQueryClient, useSuspenseQuery } from '@tanstack/react-query'; +import { useSuspenseQuery } from '@tanstack/react-query'; import { Lotus } from '@/feature/lotus'; import { lotusQueryOptions } from '@/feature/lotus'; -import { UserType, userQueryOptions } from '@/feature/user'; +import { User, userQueryOptions } from '@/feature/user'; import { LotusDeleteButton } from '@/widget/lotusDelete'; import { LotusUpdateButton, SuspenseLotusPublicToggle } from '@/widget/lotusUpdate'; export function SuspenseLotusDetail({ id }: { id: string }) { - const queryClient = useQueryClient(); + const { data: user } = useSuspenseQuery(userQueryOptions.info()); - const { data: lotus } = useSuspenseQuery(lotusQueryOptions.detail({ id })); + const { data } = useSuspenseQuery(lotusQueryOptions.detail({ id })); - const user = queryClient.getQueryData(userQueryOptions.info().queryKey); + const { lotus, author } = data; return (
-
- -
{lotus?.tags?.length > 0 && }
-
- - + +
+ +
{!lotus.isTagsEmpty && }
+
+ + +
- {user?.id === lotus?.author?.id && ( + {user?.id === author.id && (
- +
diff --git a/apps/frontend/src/widget/lotusDetail/SuspenseLotusFiles.tsx b/apps/frontend/src/widget/lotusDetail/SuspenseLotusFiles.tsx index c4dead6f..8688dcc7 100644 --- a/apps/frontend/src/widget/lotusDetail/SuspenseLotusFiles.tsx +++ b/apps/frontend/src/widget/lotusDetail/SuspenseLotusFiles.tsx @@ -1,6 +1,6 @@ import { useSuspenseQuery } from '@tanstack/react-query'; import { Skeleton } from '@/components'; -import { CodeView } from '@/feature/codeView'; +import { CodeFileModel, CodeView } from '@/feature/codeView'; import { lotusQueryOptions } from '@/feature/lotus'; export function SuspenseLotusFiles({ id }: { id: string }) { @@ -8,17 +8,14 @@ export function SuspenseLotusFiles({ id }: { id: string }) { data: { files } } = useSuspenseQuery(lotusQueryOptions.detail({ id })); - const readmeIndex = files.findIndex(({ filename }) => filename === 'README.md'); - - const firstMdIndex = files.findIndex(({ filename }) => filename.endsWith('.md')); - - const defaultIndex = readmeIndex > 0 ? readmeIndex : firstMdIndex > 0 ? firstMdIndex : 0; + const defaultFile = CodeFileModel.getDefaultFile(files); + const defaultFileIndex = defaultFile ? files.findIndex((file) => defaultFile?.filename === file.filename) : 0; return ( - +
- +
); diff --git a/apps/frontend/src/widget/lotusList/SuspenseLotusCardList.tsx b/apps/frontend/src/widget/lotusList/SuspenseLotusCardList.tsx index cc244595..9ed8437e 100644 --- a/apps/frontend/src/widget/lotusList/SuspenseLotusCardList.tsx +++ b/apps/frontend/src/widget/lotusList/SuspenseLotusCardList.tsx @@ -4,31 +4,34 @@ import { useQueryErrorResetBoundary, useSuspenseQuery } from '@tanstack/react-qu import axios from 'axios'; import { LotusLostQueryOptions } from './type'; import { Lotus } from '@/feature/lotus'; +import { User } from '@/feature/user'; import { range } from '@/shared'; export function SuspenseLotusList({ queryOptions }: { queryOptions: LotusLostQueryOptions }) { - const { data: lotusList } = useSuspenseQuery(queryOptions); + const { + data: { lotuses } + } = useSuspenseQuery(queryOptions); return (
- {lotusList?.lotuses?.map((lotus) => ( + {lotuses?.map(({ lotus, author }) => ( - - - -
- - -
- {lotus?.tags?.length ? ( - <> -
- - - ) : ( - <> - )} - + + + + +
+ + +
+ {!lotus.isTagsEmpty && ( + <> +
+ + + )} + + ))}
diff --git a/apps/frontend/src/widget/lotusList/type.ts b/apps/frontend/src/widget/lotusList/type.ts index 5fab29a7..6fb4350f 100644 --- a/apps/frontend/src/widget/lotusList/type.ts +++ b/apps/frontend/src/widget/lotusList/type.ts @@ -1,6 +1,8 @@ -import { LotusType } from '@/feature/lotus'; +import { LotusModel } from '@/feature/lotus'; +import { PageModel } from '@/feature/pagination'; +import { UserModel } from '@/feature/user'; export type LotusLostQueryOptions = { queryKey: any[]; - queryFn: (arg: any) => Promise<{ lotuses: LotusType[]; page: { max: number; current: number } }>; + queryFn: (arg: any) => Promise<{ lotuses: { lotus: LotusModel; author: UserModel }[]; page: PageModel }>; }; diff --git a/apps/frontend/src/widget/lotusUpdate/LotusUpdateForm.tsx b/apps/frontend/src/widget/lotusUpdate/LotusUpdateForm.tsx index 2fad9d05..6fa0a4bb 100644 --- a/apps/frontend/src/widget/lotusUpdate/LotusUpdateForm.tsx +++ b/apps/frontend/src/widget/lotusUpdate/LotusUpdateForm.tsx @@ -11,7 +11,9 @@ interface LotusUpdateFormProps { } export function LotusUpdateForm({ lotusId, onSubmit, onCancel }: LotusUpdateFormProps) { - const { data: lotus } = useSuspenseQuery(lotusQueryOptions.detail({ id: lotusId })); + const { + data: { lotus } + } = useSuspenseQuery(lotusQueryOptions.detail({ id: lotusId })); const [title, setTitle] = useState(lotus.title); diff --git a/apps/frontend/src/widget/lotusUpdate/SuspenseLotusPublicToggle.tsx b/apps/frontend/src/widget/lotusUpdate/SuspenseLotusPublicToggle.tsx index 0832724d..a38898a5 100644 --- a/apps/frontend/src/widget/lotusUpdate/SuspenseLotusPublicToggle.tsx +++ b/apps/frontend/src/widget/lotusUpdate/SuspenseLotusPublicToggle.tsx @@ -1,12 +1,16 @@ import { Switch, Text } from '@froxy/design/components'; import { cn } from '@froxy/design/utils'; import { useQueryClient } from '@tanstack/react-query'; -import { useLotusUpdateMutation } from '@/feature/lotus'; +import { LotusDetailModel, useLotusUpdateMutation } from '@/feature/lotus'; import { lotusQueryOptions } from '@/feature/lotus'; -import { LotusType } from '@/feature/lotus/type'; import { useDebounce } from '@/shared'; -export function SuspenseLotusPublicToggle({ lotus, className }: { lotus: LotusType; className?: string }) { +interface SuspenseLotusPublicToggleProps { + data: LotusDetailModel; + className?: string; +} + +export function SuspenseLotusPublicToggle({ data: { lotus }, className }: SuspenseLotusPublicToggleProps) { const { mutate } = useLotusUpdateMutation(); const queryClient = useQueryClient(); @@ -29,10 +33,15 @@ export function SuspenseLotusPublicToggle({ lotus, className }: { lotus: LotusTy //낙관적 업데이트 const optimisticToggle = () => { debounceToggleClick(); - queryClient.setQueryData(lotusDetailOptions.queryKey, (oldData: LotusType) => ({ - ...oldData, - isPublic: !oldData.isPublic - })); + + queryClient.setQueryData(lotusDetailOptions.queryKey, (oldData: LotusDetailModel) => { + const lotus = oldData.lotus.clone({ isPublic: !oldData.lotus.isPublic }); + + return { + ...oldData, + lotus + }; + }); }; return ( From 61aac7f180b3c87b0d03950b62e1d56d2698d90a Mon Sep 17 00:00:00 2001 From: ATeals <125727432+ATeals@users.noreply.github.com> Date: Wed, 27 Nov 2024 13:11:02 +0900 Subject: [PATCH 08/10] =?UTF-8?q?fix(#166):=20=20lotus=20Edit=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=EC=97=90=EC=84=9C=20user=20token=20401=20error?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=ED=95=B4=20=EB=94=94=ED=85=8C=EC=9D=BC=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EA=B0=80=20=EC=97=90=EB=9F=AC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=EB=90=98=EB=8A=94=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=88=20=ED=95=B4=EA=B2=B0=20(#167)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../page/(main)/lotus/$lotusId/index.lazy.tsx | 17 +++++--- .../lotusDetail/SuspenseLotusDetail.tsx | 42 ++++++------------- .../widget/lotusDetail/SuspenseLotusEdit.tsx | 37 ++++++++++++++++ apps/frontend/src/widget/lotusDetail/index.ts | 1 + 4 files changed, 62 insertions(+), 35 deletions(-) create mode 100644 apps/frontend/src/widget/lotusDetail/SuspenseLotusEdit.tsx diff --git a/apps/frontend/src/page/(main)/lotus/$lotusId/index.lazy.tsx b/apps/frontend/src/page/(main)/lotus/$lotusId/index.lazy.tsx index c979059d..04da2384 100644 --- a/apps/frontend/src/page/(main)/lotus/$lotusId/index.lazy.tsx +++ b/apps/frontend/src/page/(main)/lotus/$lotusId/index.lazy.tsx @@ -4,12 +4,13 @@ import { createLazyFileRoute, getRouteApi } from '@tanstack/react-router'; import { lotusHistoryQueryOptions } from '@/feature/history/query'; import { getLotusErrorData } from '@/feature/lotus'; import { GlobalError } from '@/shared'; -import { ErrorBoundary } from '@/shared/boundary'; +import { AsyncBoundary, ErrorBoundary } from '@/shared/boundary'; import { SuspenseLotusHistoryList } from '@/widget/history'; import { CodeRunButton } from '@/widget/lotusCodeRun'; -import { SuspenseLotusDetail } from '@/widget/lotusDetail'; +import { SuspenseLotusDetail, SuspenseLotusEdit } from '@/widget/lotusDetail'; import { SuspenseLotusFiles } from '@/widget/lotusDetail/SuspenseLotusFiles'; import { SuspensePagination } from '@/widget/SuspensePagination'; + import '@/app/style/github.css'; export const Route = createLazyFileRoute('/(main)/lotus/$lotusId/')({ @@ -30,9 +31,15 @@ function RouteComponent() { return (
- }> - - +
+ }> + + + + } rejected={() => }> + + +
}> diff --git a/apps/frontend/src/widget/lotusDetail/SuspenseLotusDetail.tsx b/apps/frontend/src/widget/lotusDetail/SuspenseLotusDetail.tsx index 57af8a4f..20fad471 100644 --- a/apps/frontend/src/widget/lotusDetail/SuspenseLotusDetail.tsx +++ b/apps/frontend/src/widget/lotusDetail/SuspenseLotusDetail.tsx @@ -2,38 +2,25 @@ import { Skeleton } from '@froxy/design/components'; import { useSuspenseQuery } from '@tanstack/react-query'; import { Lotus } from '@/feature/lotus'; import { lotusQueryOptions } from '@/feature/lotus'; -import { User, userQueryOptions } from '@/feature/user'; -import { LotusDeleteButton } from '@/widget/lotusDelete'; -import { LotusUpdateButton, SuspenseLotusPublicToggle } from '@/widget/lotusUpdate'; +import { User } from '@/feature/user'; export function SuspenseLotusDetail({ id }: { id: string }) { - const { data: user } = useSuspenseQuery(userQueryOptions.info()); - const { data } = useSuspenseQuery(lotusQueryOptions.detail({ id })); const { lotus, author } = data; return ( -
-
- - -
- -
{!lotus.isTagsEmpty && }
-
- - -
-
-
- {user?.id === author.id && ( -
- - - -
- )} +
+ + +
+ +
{!lotus.isTagsEmpty && }
+
+ + +
+
); } @@ -53,11 +40,6 @@ function SkeletonLotusDetail() {
-
- - - -
); } diff --git a/apps/frontend/src/widget/lotusDetail/SuspenseLotusEdit.tsx b/apps/frontend/src/widget/lotusDetail/SuspenseLotusEdit.tsx new file mode 100644 index 00000000..7279011e --- /dev/null +++ b/apps/frontend/src/widget/lotusDetail/SuspenseLotusEdit.tsx @@ -0,0 +1,37 @@ +import { useSuspenseQuery } from '@tanstack/react-query'; +import { lotusQueryOptions } from '@/feature/lotus'; +import { userQueryOptions } from '@/feature/user'; +import { LotusDeleteButton } from '@/widget/lotusDelete'; +import { LotusUpdateButton, SuspenseLotusPublicToggle } from '@/widget/lotusUpdate'; + +export function SuspenseLotusEdit({ id }: { id: string }) { + const { data: user } = useSuspenseQuery(userQueryOptions.info()); + + const { data } = useSuspenseQuery(lotusQueryOptions.detail({ id })); + + const { author } = data; + + return ( + user?.id === author.id && ( +
+ + + +
+ ) + ); +} + +function SuspenseLotusEditSkeleton() { + return ( +
+ + + +
+ ); +} + +SuspenseLotusEdit.Skeleton = SuspenseLotusEditSkeleton; + +SuspenseLotusEdit.Error = () =>
; diff --git a/apps/frontend/src/widget/lotusDetail/index.ts b/apps/frontend/src/widget/lotusDetail/index.ts index fdf4ba14..eeed2f2b 100644 --- a/apps/frontend/src/widget/lotusDetail/index.ts +++ b/apps/frontend/src/widget/lotusDetail/index.ts @@ -1,2 +1,3 @@ export * from './SuspenseLotusDetail'; export * from './SuspenseLotusFiles'; +export * from './SuspenseLotusEdit'; From 5bc85248f235939287d66d61d0a809dfa9e36a4a Mon Sep 17 00:00:00 2001 From: naarang <93020785+naarang@users.noreply.github.com> Date: Wed, 27 Nov 2024 14:26:57 +0900 Subject: [PATCH 09/10] =?UTF-8?q?Refactor=20#97:=20github=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=ED=81=B4=EB=9D=BC=EC=9D=B4=EC=96=B8?= =?UTF-8?q?=ED=8A=B8=EC=97=90=EC=84=9C=20=EC=9D=B8=EA=B0=80=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EB=B0=9B=EB=8A=94=20=EA=B2=83=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=98=EA=B8=B0=20(#169)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor(#97): github 로그인 시 client에서 인가 코드를 받아서 전달하는 것으로 수정 * refactor(#97): 로그인 api의 queryKey를 auth -> token으로 변경하기 * refactor(#97): refetch 대신에 enabled 수정하기 --- apps/backend/src/auth/auth.service.ts | 2 +- apps/backend/src/user/user.controller.ts | 47 +++++-------- apps/backend/src/user/user.service.ts | 4 +- apps/frontend/src/app/router/routeTree.gen.ts | 70 ++++++------------- apps/frontend/src/feature/user/api.ts | 5 +- apps/frontend/src/feature/user/query.ts | 13 ++-- apps/frontend/src/page/login/error/index.tsx | 23 ------ .../src/page/login/{success => }/index.tsx | 31 +++++--- .../src/widget/navigation/LoginButton.tsx | 12 +++- 9 files changed, 85 insertions(+), 122 deletions(-) delete mode 100644 apps/frontend/src/page/login/error/index.tsx rename apps/frontend/src/page/login/{success => }/index.tsx (57%) diff --git a/apps/backend/src/auth/auth.service.ts b/apps/backend/src/auth/auth.service.ts index 1e24c763..d1defa14 100644 --- a/apps/backend/src/auth/auth.service.ts +++ b/apps/backend/src/auth/auth.service.ts @@ -14,7 +14,7 @@ export class AuthService { ) {} private JWT_SECRET_KEY = this.configService.get('JWT_SECRET_KEY'); - createJwt(userId: string) { + createJwt(userId: string): string { const payload = { userId }; return this.jwtService.sign(payload, { secret: this.JWT_SECRET_KEY diff --git a/apps/backend/src/user/user.controller.ts b/apps/backend/src/user/user.controller.ts index f2763d2e..1c6ae2bd 100644 --- a/apps/backend/src/user/user.controller.ts +++ b/apps/backend/src/user/user.controller.ts @@ -4,20 +4,16 @@ import { DefaultValuePipe, Get, HttpCode, - HttpException, - HttpStatus, Param, ParseIntPipe, Patch, - Post, Query, Redirect, - Req, - Res + Req } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { ApiBody, ApiOperation, ApiQuery, ApiResponse } from '@nestjs/swagger'; -import { Request, Response } from 'express'; +import { Request } from 'express'; import { FileDto } from './dto/file.dto'; import { FileResponseDto } from './dto/file.response.dto'; import { TokenDTO } from './dto/token.dto'; @@ -79,27 +75,22 @@ export class UserController { } @Get('login/callback') - async githubCallback(@Query('code') code: string, @Res() res: Response): Promise { - const clientUrl = this.configService.get('CLIENT_REDIRECT_URL'); - try { - const tokenResponse = await fetch('https://github.com/login/oauth/access_token', { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - client_id: this.OAUTH_CLIENT_ID, - client_secret: this.OAUTH_CLIENT_SECRETS, - code - }) - }); - const tokenData = await tokenResponse.json(); - const token = await this.userService.loginUser(tokenData); - res.redirect(`${clientUrl}/login/success?token=${token}`); - } catch (error) { - res.redirect(`${clientUrl}/login/error`); - } + async githubCallback(@Query('code') code: string) { + const tokenResponse = await fetch('https://github.com/login/oauth/access_token', { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + client_id: this.OAUTH_CLIENT_ID, + client_secret: this.OAUTH_CLIENT_SECRETS, + code + }) + }); + const tokenData = await tokenResponse.json(); + const token = await this.userService.loginUser(tokenData); + return { token }; } @Get('/lotus') @@ -131,7 +122,7 @@ export class UserController { @ApiOperation({ summary: '사용자 정보 수정하기' }) @ApiBody({ type: UserPatchDTO }) @ApiResponse({ status: 200, description: '실행 성공', type: UserPatchDTO }) - PatchUserInfo(@Req() request: Request, @Body() userData: UserPatchDTO): Promise { + patchUserInfo(@Req() request: Request, @Body() userData: UserPatchDTO): Promise { const userId = this.authService.getIdFromRequest(request); return this.userService.patchUserDataByUserId(userId, userData); } diff --git a/apps/backend/src/user/user.service.ts b/apps/backend/src/user/user.service.ts index bb60d1ec..5a369b68 100644 --- a/apps/backend/src/user/user.service.ts +++ b/apps/backend/src/user/user.service.ts @@ -64,7 +64,6 @@ export class UserService { Authorization: `Bearer ${accessToken}` } }); - const inputUser = await userResponse.json(); let user = await this.findOne(inputUser.id); if (!user) { @@ -73,7 +72,8 @@ export class UserService { } else { await this.userRepository.update({ gitId: inputUser.id }, { gitToken: accessToken }); } - return this.authService.createJwt(user.userId); + const token = this.authService.createJwt(user.userId); + return token; } async makeTestUser(user: User) { diff --git a/apps/frontend/src/app/router/routeTree.gen.ts b/apps/frontend/src/app/router/routeTree.gen.ts index af409194..4af4aeb9 100644 --- a/apps/frontend/src/app/router/routeTree.gen.ts +++ b/apps/frontend/src/app/router/routeTree.gen.ts @@ -13,8 +13,7 @@ import { createFileRoute } from '@tanstack/react-router'; // Import Routes import { Route as rootRoute } from './../../page/__root'; -import { Route as LoginSuccessIndexImport } from './../../page/login/success/index'; -import { Route as LoginErrorIndexImport } from './../../page/login/error/index'; +import { Route as LoginIndexImport } from './../../page/login/index'; import { Route as mainUserIndexImport } from './../../page/(main)/user/index'; import { Route as mainLotusIndexImport } from './../../page/(main)/lotus/index'; import { Route as mainLotusCreateIndexImport } from './../../page/(main)/lotus/create/index'; @@ -41,15 +40,9 @@ const IndexLazyRoute = IndexLazyImport.update({ getParentRoute: () => rootRoute } as any).lazy(() => import('./../../page/index.lazy').then((d) => d.Route)); -const LoginSuccessIndexRoute = LoginSuccessIndexImport.update({ - id: '/login/success/', - path: '/login/success/', - getParentRoute: () => rootRoute -} as any); - -const LoginErrorIndexRoute = LoginErrorIndexImport.update({ - id: '/login/error/', - path: '/login/error/', +const LoginIndexRoute = LoginIndexImport.update({ + id: '/login/', + path: '/login/', getParentRoute: () => rootRoute } as any); @@ -103,6 +96,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof mainRouteLazyImport; parentRoute: typeof rootRoute; }; + '/login/': { + id: '/login/'; + path: '/login'; + fullPath: '/login'; + preLoaderRoute: typeof LoginIndexImport; + parentRoute: typeof rootRoute; + }; '/(main)/lotus/': { id: '/(main)/lotus/'; path: '/lotus'; @@ -117,20 +117,6 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof mainUserIndexImport; parentRoute: typeof mainRouteLazyImport; }; - '/login/error/': { - id: '/login/error/'; - path: '/login/error'; - fullPath: '/login/error'; - preLoaderRoute: typeof LoginErrorIndexImport; - parentRoute: typeof rootRoute; - }; - '/login/success/': { - id: '/login/success/'; - path: '/login/success'; - fullPath: '/login/success'; - preLoaderRoute: typeof LoginSuccessIndexImport; - parentRoute: typeof rootRoute; - }; '/(main)/lotus/$lotusId/': { id: '/(main)/lotus/$lotusId/'; path: '/lotus/$lotusId'; @@ -168,20 +154,18 @@ const mainRouteLazyRouteWithChildren = mainRouteLazyRoute._addFileChildren(mainR export interface FileRoutesByFullPath { '/': typeof mainRouteLazyRouteWithChildren; + '/login': typeof LoginIndexRoute; '/lotus': typeof mainLotusIndexRoute; '/user': typeof mainUserIndexRoute; - '/login/error': typeof LoginErrorIndexRoute; - '/login/success': typeof LoginSuccessIndexRoute; '/lotus/$lotusId': typeof mainLotusLotusIdIndexRoute; '/lotus/create': typeof mainLotusCreateIndexRoute; } export interface FileRoutesByTo { '/': typeof mainRouteLazyRouteWithChildren; + '/login': typeof LoginIndexRoute; '/lotus': typeof mainLotusIndexRoute; '/user': typeof mainUserIndexRoute; - '/login/error': typeof LoginErrorIndexRoute; - '/login/success': typeof LoginSuccessIndexRoute; '/lotus/$lotusId': typeof mainLotusLotusIdIndexRoute; '/lotus/create': typeof mainLotusCreateIndexRoute; } @@ -190,27 +174,25 @@ export interface FileRoutesById { __root__: typeof rootRoute; '/': typeof IndexLazyRoute; '/(main)': typeof mainRouteLazyRouteWithChildren; + '/login/': typeof LoginIndexRoute; '/(main)/lotus/': typeof mainLotusIndexRoute; '/(main)/user/': typeof mainUserIndexRoute; - '/login/error/': typeof LoginErrorIndexRoute; - '/login/success/': typeof LoginSuccessIndexRoute; '/(main)/lotus/$lotusId/': typeof mainLotusLotusIdIndexRoute; '/(main)/lotus/create/': typeof mainLotusCreateIndexRoute; } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath; - fullPaths: '/' | '/lotus' | '/user' | '/login/error' | '/login/success' | '/lotus/$lotusId' | '/lotus/create'; + fullPaths: '/' | '/login' | '/lotus' | '/user' | '/lotus/$lotusId' | '/lotus/create'; fileRoutesByTo: FileRoutesByTo; - to: '/' | '/lotus' | '/user' | '/login/error' | '/login/success' | '/lotus/$lotusId' | '/lotus/create'; + to: '/' | '/login' | '/lotus' | '/user' | '/lotus/$lotusId' | '/lotus/create'; id: | '__root__' | '/' | '/(main)' + | '/login/' | '/(main)/lotus/' | '/(main)/user/' - | '/login/error/' - | '/login/success/' | '/(main)/lotus/$lotusId/' | '/(main)/lotus/create/'; fileRoutesById: FileRoutesById; @@ -219,15 +201,13 @@ export interface FileRouteTypes { export interface RootRouteChildren { IndexLazyRoute: typeof IndexLazyRoute; mainRouteLazyRoute: typeof mainRouteLazyRouteWithChildren; - LoginErrorIndexRoute: typeof LoginErrorIndexRoute; - LoginSuccessIndexRoute: typeof LoginSuccessIndexRoute; + LoginIndexRoute: typeof LoginIndexRoute; } const rootRouteChildren: RootRouteChildren = { IndexLazyRoute: IndexLazyRoute, mainRouteLazyRoute: mainRouteLazyRouteWithChildren, - LoginErrorIndexRoute: LoginErrorIndexRoute, - LoginSuccessIndexRoute: LoginSuccessIndexRoute + LoginIndexRoute: LoginIndexRoute }; export const routeTree = rootRoute._addFileChildren(rootRouteChildren)._addFileTypes(); @@ -240,8 +220,7 @@ export const routeTree = rootRoute._addFileChildren(rootRouteChildren)._addFileT "children": [ "/", "/(main)", - "/login/error/", - "/login/success/" + "/login/" ] }, "/": { @@ -256,6 +235,9 @@ export const routeTree = rootRoute._addFileChildren(rootRouteChildren)._addFileT "/(main)/lotus/create/" ] }, + "/login/": { + "filePath": "login/index.tsx" + }, "/(main)/lotus/": { "filePath": "(main)/lotus/index.tsx", "parent": "/(main)" @@ -264,12 +246,6 @@ export const routeTree = rootRoute._addFileChildren(rootRouteChildren)._addFileT "filePath": "(main)/user/index.tsx", "parent": "/(main)" }, - "/login/error/": { - "filePath": "login/error/index.tsx" - }, - "/login/success/": { - "filePath": "login/success/index.tsx" - }, "/(main)/lotus/$lotusId/": { "filePath": "(main)/lotus/$lotusId/index.tsx", "parent": "/(main)" diff --git a/apps/frontend/src/feature/user/api.ts b/apps/frontend/src/feature/user/api.ts index dd696bc9..78a9d080 100644 --- a/apps/frontend/src/feature/user/api.ts +++ b/apps/frontend/src/feature/user/api.ts @@ -57,8 +57,9 @@ export const getUserGistFile = async ({ gistId }: { gistId: string }) => { return files.map((file) => new CodeFileModel(file)); }; -export const postLogin = async () => { - const res = await api.post<{ token: string }>('/api/user/login'); +// 로그인하기 +export const getLogin = async ({ code }: { code: string }) => { + const res = await api.get<{ token: string }>(`/api/user/login/callback?code=${code}`); const data = res.data; diff --git a/apps/frontend/src/feature/user/query.ts b/apps/frontend/src/feature/user/query.ts index 218db795..9c34e641 100644 --- a/apps/frontend/src/feature/user/query.ts +++ b/apps/frontend/src/feature/user/query.ts @@ -1,5 +1,5 @@ -import { useMutation, useSuspenseInfiniteQuery } from '@tanstack/react-query'; -import { getUserGistFile, getUserGistList, getUserInfo, getUserLotusList, patchUserInfo, postLogin } from './api'; +import { useMutation, useQuery, useSuspenseInfiniteQuery } from '@tanstack/react-query'; +import { getLogin, getUserGistFile, getUserGistList, getUserInfo, getUserLotusList, patchUserInfo } from './api'; import { createQueryOptions } from '@/shared/createQueryOptions'; export const userQueryOptions = createQueryOptions('user', { @@ -32,10 +32,11 @@ export const useUserMutation = () => { return mutation; }; -export const useLoginMutation = () => { - const mutation = useMutation({ - mutationFn: postLogin +export const useLoginQuery = ({ code }: { code: string }) => { + const query = useQuery({ + queryKey: ['token'], + queryFn: () => getLogin({ code }) }); - return mutation; + return query; }; diff --git a/apps/frontend/src/page/login/error/index.tsx b/apps/frontend/src/page/login/error/index.tsx deleted file mode 100644 index 291d0762..00000000 --- a/apps/frontend/src/page/login/error/index.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { Navigate, createFileRoute } from '@tanstack/react-router'; -import { useToast } from '@/shared/toast'; - -export const Route = createFileRoute('/login/error/')({ - component: RouteComponent, - errorComponent: ErrorComponent -}); - -function RouteComponent() { - throw new Error(); -} - -function ErrorComponent() { - const { toast } = useToast(); - - toast({ - variant: 'error', - description: '로그인에 실패했습니다.', - duration: 2000 - }); - - return ; -} diff --git a/apps/frontend/src/page/login/success/index.tsx b/apps/frontend/src/page/login/index.tsx similarity index 57% rename from apps/frontend/src/page/login/success/index.tsx rename to apps/frontend/src/page/login/index.tsx index 34951e8f..a43d5a77 100644 --- a/apps/frontend/src/page/login/success/index.tsx +++ b/apps/frontend/src/page/login/index.tsx @@ -2,37 +2,42 @@ import { useEffect } from 'react'; import { useQuery } from '@tanstack/react-query'; import { Navigate, createFileRoute } from '@tanstack/react-router'; import { z } from 'zod'; -import { userQueryOptions } from '@/feature/user/query'; +import { useLoginQuery, userQueryOptions } from '@/feature/user/query'; import { LoadingPage } from '@/page/-LoadingPage'; import { useLocalStorage } from '@/shared'; import { useToast } from '@/shared/toast'; const loginTokenValidation = z.object({ - token: z.string().min(1, '토큰이 없습니다.') + code: z.string().min(1, '깃허브 인증에 실패했습니다.') }); -export const Route = createFileRoute('/login/success/')({ +export const Route = createFileRoute('/login/')({ validateSearch: (search) => loginTokenValidation.parse(search), component: RouteComponent, errorComponent: ErrorComponent }); function RouteComponent() { + const { code } = Route.useSearch(); + const [, set] = useLocalStorage({ key: 'token', initialValue: '' }); - const { token } = Route.useSearch(); + const { data, error: loginError } = useLoginQuery({ code }); - const { data: user, error, isLoading } = useQuery(userQueryOptions.info()); + const { data: user, error: userInfoError } = useQuery({ + ...userQueryOptions.info(), + enabled: !!data?.token + }); useEffect(() => { - set(token); - }, [token, set, user]); + if (data?.token) set(data.token); + }, [set, data]); - if (error) throw new Error('유저 정보 조회에 실패했습니다.'); + if (loginError || userInfoError) throw new Error('유저 정보 조회에 실패했습니다.'); - if (isLoading) return ; + if (!user) return ; - return ; + return ; } function SuccessComponent({ nickname }: { nickname: string }) { @@ -49,7 +54,11 @@ function ErrorComponent() { const { toast } = useToast({ isCloseOnUnmount: false }); useEffect(() => { - toast({ variant: 'error', description: '로그인에 실패했습니다.', duration: 2000 }); + toast({ + variant: 'error', + description: '로그인에 실패했습니다.', + duration: 2000 + }); }, [toast]); return ; diff --git a/apps/frontend/src/widget/navigation/LoginButton.tsx b/apps/frontend/src/widget/navigation/LoginButton.tsx index 32e9c861..38f28e12 100644 --- a/apps/frontend/src/widget/navigation/LoginButton.tsx +++ b/apps/frontend/src/widget/navigation/LoginButton.tsx @@ -4,10 +4,18 @@ import { Button } from '@froxy/design/components'; type LoginButtonProps = ComponentProps; export function LoginButton(props: LoginButtonProps) { + const githubURL = `https://github.com/login/oauth/authorize?client_id=${ + import.meta.env.VITE_OAUTH_CLIENT_ID + }&redirect_uri=${import.meta.env.VITE_OAUTH_LOGIN_CALLBACK_URL}`; + + const handleLogin = async () => { + window.location.href = githubURL; + }; + return ( <> - ); From 36b63a95e9d9c717151a9667d801439ffd31dc47 Mon Sep 17 00:00:00 2001 From: ATeals <125727432+ATeals@users.noreply.github.com> Date: Wed, 27 Nov 2024 17:04:13 +0900 Subject: [PATCH 10/10] =?UTF-8?q?Feature=20#168=20=ED=94=84=EB=A1=A0?= =?UTF-8?q?=ED=8A=B8=20=ED=8D=BC=EB=B8=94=EB=A6=AC=EC=8B=B1=20(#170)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * style(#168): 배경색 변경, border shadow 변경 * feat(#168): HistoryListEmpty Ui * style(#168): detail page 반응형 추가 * feat(#168): 온보딩 페이지 캐러셀 --- apps/frontend/index.html | 2 +- .../public/json/emptyHistoryAnimation.json | 1 + apps/frontend/src/app/style/github.css | 1 - apps/frontend/src/page/index.lazy.tsx | 19 +++--- apps/frontend/src/widget/Header.tsx | 2 +- .../history/SuspenseLotusHistoryList.tsx | 21 ++++++- .../lotusDetail/SuspenseLotusDetail.tsx | 2 +- .../widget/lotusDetail/SuspenseLotusFiles.tsx | 4 +- .../src/widget/lotusList/LotusSearchBar.tsx | 8 +-- .../lotusList/SuspenseLotusCardList.tsx | 4 +- .../widget/onboarding/OnBoardingCarousel.tsx | 58 +++++++++++++++++++ .../src/widget/onboarding/constant.tsx | 23 ++++++++ apps/frontend/src/widget/onboarding/index.ts | 1 + packages/design/package.json | 1 + .../design/src/components/ui/pagination.tsx | 2 +- .../design/src/components/ui/skeleton.tsx | 2 +- packages/design/src/index.ts | 4 ++ 17 files changed, 130 insertions(+), 25 deletions(-) create mode 100644 apps/frontend/public/json/emptyHistoryAnimation.json create mode 100644 apps/frontend/src/widget/onboarding/OnBoardingCarousel.tsx create mode 100644 apps/frontend/src/widget/onboarding/constant.tsx create mode 100644 apps/frontend/src/widget/onboarding/index.ts diff --git a/apps/frontend/index.html b/apps/frontend/index.html index 30b9c00b..1076b4b8 100644 --- a/apps/frontend/index.html +++ b/apps/frontend/index.html @@ -6,7 +6,7 @@ Froxy - +
diff --git a/apps/frontend/public/json/emptyHistoryAnimation.json b/apps/frontend/public/json/emptyHistoryAnimation.json new file mode 100644 index 00000000..ad6aa197 --- /dev/null +++ b/apps/frontend/public/json/emptyHistoryAnimation.json @@ -0,0 +1 @@ +{"v":"5.5.5","fr":60,"ip":0,"op":225,"w":985,"h":910,"nm":"▽ Group 62","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 16","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[492.5,455,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 14","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[492.5,455,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-40.75,-106.75],[-17.5,-96.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.350949754902,0.350949754902,0.350949754902,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.075],"y":[0.344]},"t":44,"s":[0]},{"t":70,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 13","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[492.5,455,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-62.25,-138.25],[-14.5,-118.25]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.350949754902,0.350949754902,0.350949754902,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.075],"y":[0.344]},"t":41,"s":[0]},{"t":67,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 12","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[492.5,455,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-58.5,-154.5],[-9.75,-133]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.350949754902,0.350949754902,0.350949754902,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.075],"y":[0.344]},"t":38,"s":[0]},{"t":64,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 11","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[492.5,455,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-54.25,-171],[-5.75,-150.25]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.350949754902,0.350949754902,0.350949754902,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.075],"y":[0.344]},"t":37,"s":[0]},{"t":63,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 10","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[492.5,455,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-46.5,-185.5],[2.75,-165.25]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.350949754902,0.350949754902,0.350949754902,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.075],"y":[0.344]},"t":34,"s":[0]},{"t":60,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[492.5,455,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.295,3.052],[-2.065,1.835],[-3.494,-0.079],[-1.058,-3.597],[7,1.25]],"o":[[0,0],[-0.25,-2.588],[1.985,-1.764],[4.428,0.1],[2.5,8.5],[-1.984,-0.354]],"v":[[-1.25,-183],[-3.143,-188.688],[-0.5,-196],[8.497,-199.346],[18.5,-193.25],[5.25,-180]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.350949754902,0.350949754902,0.350949754902,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.075],"y":[0.344]},"t":38,"s":[0]},{"t":64,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[492.5,455,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-32.75,-207],[-15.75,-200.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.350949754902,0.350949754902,0.350949754902,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.075],"y":[0.344]},"t":32,"s":[0]},{"t":58,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Page","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[471.356,299.63,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.82,-7.34],[-0.31,0.1],[6.69,2.57],[0.94,0.38],[0.17,0.55],[-0.03,0.35],[-0.04,0.42],[-0.11,0.88],[-0.32,1.7],[-5.49,8.32],[-1.22,1.37],[0.3,-0.08],[-7.46,-2.75],[-0.76,-0.25],[0.1,-0.37],[0.32,-0.7],[1.27,-2.91],[1.3,-3.61],[-0.12,0.33],[-3.33,7.16],[0.06,0.02],[7.84,4.29],[0.18,-0.21],[2.26,-4.92],[1.2,-5.73],[0.26,-3.47],[-0.94,-0.49],[-0.9,-0.36],[-7.11,-3.21],[-0.08,0.31],[-2.56,7.12],[0.11,-0.33]],"o":[[-2.56,7.12],[0.3,-0.11],[-6.54,-2.95],[-0.95,-0.36],[-0.53,-0.22],[-0.1,-0.34],[0.03,-0.42],[0.08,-0.9],[0.21,-1.71],[1.85,-9.78],[1,-1.53],[-0.3,0.08],[7,3.82],[0.75,0.27],[0.37,0.13],[-0.19,0.74],[-1.32,2.89],[-1.54,3.52],[-0.12,0.32],[2.69,-7.43],[0.04,-0.07],[-8.28,-3.26],[-0.26,-0.14],[-3.61,4.09],[-2.44,5.32],[-0.71,3.41],[-0.08,1.02],[0.85,0.44],[7.25,2.86],[0.24,0.11],[1.82,-7.34],[0.11,-0.32],[0,0]],"v":[[10.354,5.075],[3.894,26.805],[4.814,26.495],[-14.936,17.865],[-17.766,16.755],[-19.726,15.665],[-19.636,14.405],[-19.536,13.135],[-19.256,10.465],[-18.456,5.355],[-7.426,-22.275],[-4.156,-26.715],[-5.046,-26.475],[17.204,-17.565],[19.454,-16.725],[19.624,-16.475],[18.614,-14.275],[14.724,-5.585],[10.354,5.075],[11.374,4.935],[20.764,-16.875],[20.664,-17.045],[-4.226,-26.965],[-5.106,-26.725],[-13.706,-12.625],[-19.186,4.025],[-20.646,14.355],[-20.136,16.545],[-17.466,17.685],[3.994,26.975],[4.914,26.665],[11.374,4.935],[10.354,5.075]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960992813,0.501960992813,0.501960992813,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Fill 50","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[412.178,346.625,0],"ix":2},"a":{"a":0,"k":[-80.322,-108.375,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8,6.5],[-2.5,-33.5],[0,0],[-38.5,76]],"o":[[-28.5,25],[22.5,10.5],[0,0],[-37.5,-13.5]],"v":[[-33,-235.5],[-81,-108],[-8.5,-75.5],[40,-206]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.501960784314,0.501960784314,0.501960784314,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Page 6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.026],"y":[0.06]},"t":40,"s":[0]},{"t":63,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.194],"y":[1.028]},"o":{"x":[0.067],"y":[1.268]},"t":41,"s":[-10]},{"t":99,"s":[0]}],"ix":10},"p":{"a":0,"k":[493.663,378.251,0],"ix":2},"a":{"a":0,"k":[-25.808,62.423,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.62,-1.21],[-0.23,0.21],[0.33,-0.4],[0.65,-0.91],[1.37,-2.16],[2.62,-7.94],[0.61,-1.97],[-0.29,0.08],[0.37,0.2],[-0.5,-0.27],[-0.38,-0.2],[-0.1,0.33],[-1.81,4.54],[-4.14,5.99],[-0.68,0.93],[-0.36,0.46],[-0.11,0.16],[0.59,0.19],[0.48,0.36],[1.69,1.11],[-0.48,-0.31]],"o":[[1.69,1.11],[0.23,-0.21],[-0.59,-0.2],[-0.73,0.85],[-1.48,2.08],[-4.51,7.05],[-0.65,1.96],[0.29,-0.08],[-0.37,-0.2],[-0.38,-0.21],[0.37,0.2],[0.24,0.14],[1.43,-4.67],[2.69,-6.8],[0.66,-0.96],[0.35,-0.47],[0.12,-0.15],[0.29,-0.41],[0.33,0.11],[-1.62,-1.21],[-0.38,-0.24],[0,0]],"v":[[4.827,-20.462],[9.817,-17.002],[10.497,-17.632],[9.107,-16.842],[7.087,-14.152],[2.777,-7.802],[-7.743,14.778],[-9.583,20.688],[-8.703,20.448],[-9.813,19.848],[-10.593,20.438],[-9.483,21.038],[-8.603,20.808],[-3.843,6.978],[6.687,-12.052],[8.697,-14.902],[9.757,-16.302],[10.137,-16.752],[9.907,-16.952],[10.597,-17.592],[5.617,-21.052],[4.827,-20.462]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960992813,0.501960992813,0.501960992813,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Fill 32","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Shape Layer 15","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.026],"y":[0.06]},"t":40,"s":[0]},{"t":63,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.194],"y":[1.028]},"o":{"x":[0.067],"y":[1.268]},"t":41,"s":[-10]},{"t":99,"s":[0]}],"ix":10},"p":{"a":0,"k":[490.97,360.535,0],"ix":2},"a":{"a":0,"k":[-1.53,-94.465,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[17.418,-67.064],[0,0]],"o":[[0,0],[3.461,-18.041],[0,0]],"v":[[34.284,-193.75],[-1.5,-94.5],[45.75,-187.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.87740502451,0.87740502451,0.87740502451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[101.989,99.963],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Page 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.026],"y":[0.06]},"t":46,"s":[0]},{"t":69,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.194],"y":[1.028]},"o":{"x":[0.067],"y":[1.268]},"t":47,"s":[-10]},{"t":105,"s":[0]}],"ix":10},"p":{"a":0,"k":[492.459,373.771,0],"ix":2},"a":{"a":0,"k":[-34.569,50.461,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.11,-1.29],[-0.29,0.15],[0.5,-0.44],[1.43,-1.36],[3.2,-5.07],[1.59,-3.68],[-0.14,0.33],[-3.98,5.09],[-3.34,3.09],[-0.79,0.69],[-0.32,0.26],[-0.09,0.1],[0.72,0.38],[0.3,0.35],[1.24,1.17],[-0.3,-0.27]],"o":[[1.23,1.17],[0.29,-0.15],[-0.85,-0.45],[-1.48,1.31],[-4.35,4.12],[-2.14,3.39],[-0.21,0.47],[2.57,-5.93],[2.81,-3.59],[0.77,-0.71],[0.3,-0.27],[0.11,-0.09],[0.28,-0.33],[0.22,0.12],[-1.11,-1.28],[-0.27,-0.25],[0,0]],"v":[[7.548,-16.61],[11.158,-13],[12.038,-13.46],[9.188,-11.73],[4.827,-7.7],[-6.553,6.14],[-12.132,16.78],[-11.182,16.82],[-1.372,0.18],[7.977,-9.69],[10.307,-11.79],[11.238,-12.58],[11.598,-12.86],[11.227,-12.95],[12.107,-13.41],[8.488,-17.02],[7.548,-16.61]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960992813,0.501960992813,0.501960992813,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Fill 28","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Shape Layer 17","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.026],"y":[0.06]},"t":46,"s":[0]},{"t":69,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.194],"y":[1.028]},"o":{"x":[0.067],"y":[1.268]},"t":47,"s":[-10]},{"t":105,"s":[0]}],"ix":10},"p":{"a":0,"k":[507.867,343.3,0],"ix":2},"a":{"a":0,"k":[15.367,-111.7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[23,-38]],"o":[[0,0],[0,0],[6,-20.5]],"v":[[49.5,-177.75],[58.75,-170.25],[13,-114.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.87740502451,0.87740502451,0.87740502451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Fill 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[157.973,122.959,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.59,2],[-17.79,0],[-6.7,-1.16],[-6.74,0.1],[-5.95,13.01],[7.48,9.32],[5.81,2.71],[15.74,-5.22],[1.25,-4.87]],"o":[[2.03,0.36],[-0.6,-2.04],[6.8,0],[6.65,1.15],[7.45,-0.11],[5.02,-10.99],[-4.01,-5],[-8.29,-3.86],[-15.73,5.22],[-9.75,38.06]],"v":[[-24.755,40.762],[-23.845,38.382],[-16.395,25.092],[3.765,27.882],[23.905,29.462],[49.315,10.522],[44.985,-19.118],[24.515,-33.998],[-24.755,-38.848],[-50.005,-14.248]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.944113016129,0.944113016129,0.944113016129,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Fill 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 1","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.511],"y":[1]},"o":{"x":[0.012],"y":[0.399]},"t":52,"s":[-80]},{"t":147,"s":[0]}],"ix":10},"p":{"a":0,"k":[488.737,378.563,0],"ix":2},"a":{"a":0,"k":[488.574,378.572,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.509,0.509,0.667],"y":[1,1,1]},"o":{"x":[0.005,0.005,0.333],"y":[0.874,0.874,0]},"t":65,"s":[0,0,100]},{"t":190,"s":[100,100,100]}],"ix":6}},"ao":0,"w":985,"h":910,"ip":56,"op":3656,"st":56,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[485.213,615.857,0],"ix":2},"a":{"a":0,"k":[-5.5,168.211,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.325,0.325,0.667],"y":[0.995,0.995,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":58,"s":[100,100,100]},{"i":{"x":[0.349,0.349,0.667],"y":[0.741,0.741,1]},"o":{"x":[0.693,0.693,0.333],"y":[0.018,0.018,0]},"t":98,"s":[138.645,138.645,100]},{"i":{"x":[0.568,0.568,0.667],"y":[2.815,2.815,1]},"o":{"x":[0.385,0.385,0.333],"y":[2.381,2.381,0]},"t":137,"s":[96,96,100]},{"i":{"x":[0.624,0.624,0.667],"y":[0.963,0.963,1]},"o":{"x":[0.468,0.468,0.333],"y":[0.158,0.158,0]},"t":180,"s":[95,95,100]},{"i":{"x":[0.541,0.541,0.667],"y":[0.506,0.506,1]},"o":{"x":[0.468,0.468,0.333],"y":[-0.017,-0.017,0]},"t":230,"s":[120,120,100]},{"i":{"x":[0.459,0.459,0.667],"y":[1.04,1.04,1]},"o":{"x":[0.36,0.36,0.333],"y":[0.613,0.613,0]},"t":293,"s":[100,100,100]},{"i":{"x":[0.727,0.727,0.667],"y":[0.551,0.551,1]},"o":{"x":[0.45,0.45,0.333],"y":[0.035,0.035,0]},"t":318,"s":[96,96,100]},{"i":{"x":[0.638,0.638,0.667],"y":[1.012,1.012,1]},"o":{"x":[0.349,0.349,0.333],"y":[0.533,0.533,0]},"t":360,"s":[120,120,100]},{"i":{"x":[0.437,0.437,0.667],"y":[0.5,0.5,1]},"o":{"x":[0.657,0.657,0.333],"y":[0.057,0.057,0]},"t":383,"s":[134,134,100]},{"t":402,"s":[114,114,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.774,21.711],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.850980451995,0.61568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1.887,157.355],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":53,"op":3653,"st":53,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[372.523,613.982,0],"ix":2},"a":{"a":0,"k":[9.274,168.211,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.325,0.325,0.667],"y":[0.995,0.995,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":58,"s":[100,100,100]},{"i":{"x":[0.349,0.349,0.667],"y":[0.741,0.741,1]},"o":{"x":[0.693,0.693,0.333],"y":[0.018,0.018,0]},"t":98,"s":[138.645,138.645,100]},{"i":{"x":[0.568,0.568,0.667],"y":[2.815,2.815,1]},"o":{"x":[0.385,0.385,0.333],"y":[2.381,2.381,0]},"t":137,"s":[96,96,100]},{"i":{"x":[0.624,0.624,0.667],"y":[0.963,0.963,1]},"o":{"x":[0.468,0.468,0.333],"y":[0.158,0.158,0]},"t":180,"s":[95,95,100]},{"i":{"x":[0.541,0.541,0.667],"y":[0.506,0.506,1]},"o":{"x":[0.468,0.468,0.333],"y":[-0.017,-0.017,0]},"t":230,"s":[120,120,100]},{"i":{"x":[0.459,0.459,0.667],"y":[1.04,1.04,1]},"o":{"x":[0.36,0.36,0.333],"y":[0.613,0.613,0]},"t":293,"s":[100,100,100]},{"i":{"x":[0.727,0.727,0.667],"y":[0.551,0.551,1]},"o":{"x":[0.45,0.45,0.333],"y":[0.035,0.035,0]},"t":318,"s":[96,96,100]},{"i":{"x":[0.638,0.638,0.667],"y":[1.012,1.012,1]},"o":{"x":[0.349,0.349,0.333],"y":[0.533,0.533,0]},"t":360,"s":[120,120,100]},{"i":{"x":[0.437,0.437,0.667],"y":[0.5,0.5,1]},"o":{"x":[0.657,0.657,0.333],"y":[0.057,0.057,0]},"t":383,"s":[134,134,100]},{"t":402,"s":[114,114,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.774,21.711],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.850980451995,0.61568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1.887,157.355],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":53,"op":3653,"st":53,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[395.437,594.09,0],"ix":2},"a":{"a":0,"k":[-30.188,139.09,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-13.625,11.375]],"o":[[0,0],[13.625,-11.375]],"v":[[-40.375,136.375],[-20,136.875]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.619607843137,0.501960784314,0.321568627451,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.626],"y":[1]},"o":{"x":[0.695],"y":[0]},"t":38,"s":[50]},{"t":73,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.634],"y":[1]},"o":{"x":[0.882],"y":[0]},"t":38,"s":[50]},{"t":73,"s":[0]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":38,"op":3638,"st":38,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[462.312,594.09,0],"ix":2},"a":{"a":0,"k":[-30.188,139.09,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-13.625,11.375]],"o":[[0,0],[13.625,-11.375]],"v":[[-40.375,136.375],[-20,136.875]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.619607843137,0.501960784314,0.321568627451,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.626],"y":[1]},"o":{"x":[0.695],"y":[0]},"t":38,"s":[50]},{"t":73,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.634],"y":[1]},"o":{"x":[0.882],"y":[0]},"t":38,"s":[50]},{"t":73,"s":[0]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":38,"op":3638,"st":38,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[427.688,624.517,0],"ix":2},"a":{"a":0,"k":[-64.812,169.517,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.25,-5],[-20.75,22.25]],"o":[[2,3.875],[22.08,-23.676]],"v":[[-84.375,163.625],[-45.25,165]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.619607843137,0.501960784314,0.321568627451,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.626],"y":[1]},"o":{"x":[0.695],"y":[0]},"t":54,"s":[50]},{"i":{"x":[0.526],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[100]},{"i":{"x":[0.334],"y":[1]},"o":{"x":[0.453],"y":[0]},"t":155.562,"s":[80]},{"i":{"x":[0.461],"y":[1]},"o":{"x":[0.63],"y":[0]},"t":239,"s":[100]},{"i":{"x":[0.42],"y":[1]},"o":{"x":[0.485],"y":[0]},"t":325,"s":[80]},{"t":408.4375,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.634],"y":[1]},"o":{"x":[0.882],"y":[0]},"t":54,"s":[50]},{"i":{"x":[0.575],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":89,"s":[0]},{"i":{"x":[0.634],"y":[1]},"o":{"x":[0.568],"y":[0]},"t":155.562,"s":[20]},{"i":{"x":[0.562],"y":[1]},"o":{"x":[0.373],"y":[0]},"t":239,"s":[0]},{"i":{"x":[0.568],"y":[1]},"o":{"x":[0.499],"y":[0]},"t":325,"s":[20]},{"t":408.4375,"s":[0]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":54,"op":3654,"st":54,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Bubbel 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[385.71,440.982,0],"ix":2},"a":{"a":0,"k":[-29.71,24.982,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.648,0.648,0.333],"y":[0,0,0]},"t":21,"s":[0,0,100]},{"t":84,"s":[-100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.25,-0.9],[-1.04,0.06],[-4.13,1.83],[-0.16,0.068],[-0.385,0.148],[1.549,1.633],[3.32,-5.46]],"o":[[0.78,0.56],[2.33,-0.12],[0.162,-0.071],[0.396,-0.168],[8.268,-3.182],[-3.02,-3.21],[0.02,1.45]],"v":[[-11.36,3.79],[-8.4,4.49],[-1.23,1.99],[-0.746,1.781],[0.425,1.307],[12.74,-2.26],[-13,-0.15]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.850000023842,0.850000023842,0.850000023842,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":-210,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Fill 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-38,"op":3562,"st":-38,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Bubble","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[656.185,350.788,0],"ix":2},"a":{"a":0,"k":[-17.205,11.132,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.039,0.039,0.333],"y":[0.31,0.31,0]},"t":67,"s":[0,0,100]},{"t":117,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.21,-0.79],[-0.94,-0.12],[-2.08,1.93],[1.57,1.52],[-0.07,-4.55]],"o":[[0.02,1.26],[0.75,0.48],[3.25,0.41],[1.24,-1.14],[-2.91,-2.79],[0,0]],"v":[[-7,-0.31],[-5.42,3.12],[-2.76,3.9],[4.31,1.55],[6.5,-2.1],[-7,-0.31]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.850000023842,0.850000023842,0.850000023842,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":-195,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Fill 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"bubble","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[574.516,424.335,0],"ix":2},"a":{"a":0,"k":[-50.367,24.951,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.009,0.009,0.333],"y":[0.234,0.234,0]},"t":57,"s":[0,0,100]},{"t":127,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.81,-1.47],[-1.51,0.09],[-5.96,2.98],[2.37,2.84],[4.78,-8.91]],"o":[[1.12,0.91],[3.35,-0.19],[13.21,-6.6],[-4.36,-5.23],[0.03,2.37]],"v":[[-16.37,6.182],[-12.1,7.322],[-1.77,3.252],[18.37,-3.688],[-18.74,-0.238]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.949999988079,0.949999988079,0.949999988079,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":-195,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Fill 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":0,"nm":"Big Bubble","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[413.5,444.008,0],"ix":2},"a":{"a":0,"k":[81.5,245.508,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.019,0.019,0.333],"y":[0.528,0.528,0]},"t":29,"s":[0,0,100]},{"t":167,"s":[98,98,100]}],"ix":6}},"ao":0,"w":315,"h":246,"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[492.5,455,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[4.25,-20.25],[3,-10.25],[4.25,-6.25],[10,-2.25],[4.052,5.462],[1.25,14.5],[0.75,-10.25],[0,0],[0,0]],"o":[[0,0],[0,0],[-2,30.25],[-3.458,11.815],[-5,7.75],[-11.649,2.621],[-5.75,-7.75],[-1.801,-20.888],[0.5,-12.5],[0,0],[0,0]],"v":[[-119,6],[152,9.25],[146.75,130.75],[136.75,188.25],[123.5,216.5],[99.25,236],[76.5,225.5],[67,188],[69,127],[76.75,57.5],[81.875,24.375]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.996078431373,0.894117647059,0.741176470588,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[38]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[49]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":9,"s":[67]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[69]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[69]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":23,"s":[72.333]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[76.111]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":29,"s":[81]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[88]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[95]},{"t":41,"s":[100]}],"ix":2},"o":{"a":0,"k":-360,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"Folder Front 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[443.987,587.909,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[4.237,-0.553],[6.394,8.698],[0,0],[-2.871,-1.286],[-3.656,-0.473],[-2.84,-0.45],[-3.34,-0.28],[-4.16,-0.18],[-4.6,-0.08],[-4.67,0.02],[-4.37,0.13],[-3.68,0.24],[-3.43,1.26]],"o":[[-6.456,1.023],[-6.763,0.03],[0,0],[1.519,2.125],[1.529,0.685],[2.583,0.334],[3.31,0.53],[4.14,0.35],[4.59,0.21],[4.67,0.09],[4.37,-0.01],[3.69,-0.1],[3.59,-0.22],[0,0]],"v":[[49.294,34.924],[45.85,35.334],[-44.306,30.374],[-45.848,28.739],[-40.316,32.971],[-33.09,34.337],[-26.383,35.167],[-17.903,35.734],[-6.203,36.171],[0.494,36.601],[14.494,36.701],[27.927,36.751],[38.654,36.271],[49.294,34.541]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[3.987,-0.137],[34.561,10.657],[0,0],[-1.263,-0.523],[-2.739,-0.515],[-2.654,-0.303],[-3.34,-0.28],[-4.16,-0.18],[-4.6,-0.08],[-4.67,0.02],[-4.37,0.13],[-3.68,0.24],[-3.43,1.26]],"o":[[-3.623,0.69],[-29.58,-0.12],[0,0],[2.644,3.833],[1.404,0.643],[2.38,0.448],[3.33,0.381],[4.14,0.35],[4.59,0.21],[4.67,0.09],[4.37,-0.01],[3.69,-0.1],[3.59,-0.22],[0,0]],"v":[[49.793,34.341],[41.184,35.667],[-44.89,29.457],[-46.515,28.031],[-40.233,33.012],[-34.048,34.337],[-25.716,35.334],[-17.736,35.942],[-6.453,36.504],[0.494,36.601],[14.493,36.701],[27.593,36.501],[38.653,36.021],[49.293,34.541]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[0,0],[2.456,2.744],[33.977,11.933],[-0.91,-2.287],[-2.696,-1.758],[-2.504,-0.442],[-3.091,-0.257],[-3.34,-0.28],[-4.16,-0.18],[-4.6,-0.08],[-4.67,0.02],[-4.37,0.13],[-3.68,0.24],[-3.43,1.26]],"o":[[-4.862,0.836],[-29.58,-0.12],[0,0],[0.91,2.287],[2.696,1.758],[2.172,0.383],[3.341,0.277],[4.14,0.35],[4.59,0.21],[4.67,0.09],[4.37,-0.01],[3.69,-0.1],[3.59,-0.22],[0,0]],"v":[[49.793,34.341],[41.298,31.12],[-47.713,23.154],[-46.989,26.202],[-42.359,32.189],[-35.908,34.348],[-28.28,35.12],[-19.096,35.854],[-9.443,36.358],[0.494,36.601],[14.494,36.701],[27.593,36.501],[38.653,36.021],[49.293,34.541]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,0],[3.071,5.697],[33.227,13.573],[0,0],[-1.346,-1.857],[-2.406,-0.473],[-2.84,-0.45],[-3.34,-0.28],[-4.16,-0.18],[-4.6,-0.08],[-4.67,0.02],[-4.37,0.13],[-3.68,0.24],[-3.43,1.26]],"o":[[-4.622,0.857],[-29.58,-0.12],[0,0],[0.394,3.333],[0.84,1.159],[2.555,0.503],[3.31,0.53],[4.14,0.35],[4.59,0.21],[4.67,0.09],[4.37,-0.01],[3.69,-0.1],[3.59,-0.22],[0,0]],"v":[[49.793,34.341],[39.684,27.417],[-48.223,17.207],[-47.89,20.197],[-45.066,29.637],[-39.423,33.254],[-31.883,34.584],[-20.736,35.901],[-13.286,36.171],[0.494,36.601],[14.494,36.701],[27.593,36.501],[38.653,36.021],[49.293,34.541]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[0,0],[0.74,7.15],[33.22,13.544],[0,0],[-1.262,-3.352],[-1.185,-0.936],[-2.84,-0.45],[-3.34,-0.28],[-4.16,-0.18],[-4.6,-0.08],[-4.67,0.02],[-4.37,0.13],[-3.68,0.24],[-3.43,1.26]],"o":[[-6.465,1.026],[-29.58,-0.12],[0,0],[0.727,5.833],[0.925,2.458],[1.511,1.194],[3.31,0.53],[4.14,0.35],[4.59,0.21],[4.67,0.09],[4.37,-0.01],[3.69,-0.1],[3.59,-0.22],[0,0]],"v":[[49.793,34.341],[38.931,22.714],[-49.057,12.108],[-48.89,15.774],[-46.817,27.216],[-43.09,31.92],[-35.716,34.251],[-25.736,35.401],[-13.286,36.171],[0.494,36.601],[14.493,36.701],[27.593,36.501],[38.653,36.021],[49.293,34.541]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[-0.679,12.947],[39.061,7.24],[0,0],[-0.654,-2.477],[-2.073,-1.89],[-2.84,-0.45],[-3.34,-0.28],[-4.16,-0.18],[-4.6,-0.08],[-4.67,0.02],[-4.37,0.13],[-3.68,0.24],[-3.43,1.26]],"o":[[-10.622,2.19],[-31.846,5.78],[0,0],[0.227,3.833],[0.654,2.477],[2.125,1.938],[3.31,0.53],[4.14,0.35],[4.59,0.21],[4.67,0.09],[4.37,-0.01],[3.69,-0.1],[3.59,-0.22],[0,0]],"v":[[49.794,34.341],[38.35,5.084],[-49.39,4.957],[-48.973,15.031],[-47.733,24.971],[-43.756,31.421],[-35.716,34.251],[-25.736,35.401],[-13.286,36.171],[0.494,36.601],[14.493,36.701],[27.594,36.501],[38.654,36.021],[49.294,34.541]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[0,0],[-3.068,20.113],[32.74,2.487],[0,0],[-1.171,-4.286],[-2.798,-2.377],[-2.84,-0.45],[-3.34,-0.28],[-4.16,-0.18],[-4.6,-0.08],[-4.67,0.02],[-4.37,0.13],[-3.68,0.24],[-3.43,1.26]],"o":[[-12.4,2.857],[-30.335,1.847],[0,0],[0.561,5.167],[0.944,3.462],[2.182,1.873],[3.31,0.53],[4.14,0.35],[4.59,0.21],[4.67,0.09],[4.37,-0.01],[3.69,-0.1],[3.59,-0.22],[0,0]],"v":[[49.794,34.341],[39.406,-5.916],[-49.39,-7.487],[-49.362,11.475],[-47.511,24.471],[-43.756,31.421],[-35.716,34.251],[-25.736,35.401],[-13.286,36.171],[0.494,36.601],[14.493,36.701],[27.594,36.501],[38.654,36.021],[49.294,34.541]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[0,0],[-2.513,15.613],[29.58,0.11],[-0.061,-4.667],[-1.733,-5.097],[-1.678,-1.783],[-2.84,-0.45],[-3.34,-0.28],[-4.16,-0.18],[-4.6,-0.08],[-4.67,0.02],[-4.37,0.13],[-3.68,0.24],[-3.43,1.26]],"o":[[-13.289,3.19],[-29.58,-0.12],[0,0],[0.061,4.667],[1.154,3.393],[1.594,1.693],[3.31,0.53],[4.14,0.35],[4.59,0.21],[4.67,0.09],[4.37,-0.01],[3.69,-0.1],[3.59,-0.22],[0,0]],"v":[[49.794,34.341],[39.684,-6.416],[-49.39,-13.709],[-49.806,9.864],[-47.983,24.471],[-43.756,31.421],[-35.716,34.251],[-25.736,35.401],[-13.286,36.171],[0.494,36.601],[14.493,36.701],[27.594,36.501],[38.654,36.021],[49.294,34.541]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[0,0],[-3.358,18.268],[50.384,5.02],[0,0],[-0.763,-2.607],[-1.822,-1.473],[-2.84,-0.45],[-3.34,-0.28],[-4.16,-0.18],[-4.6,-0.08],[-4.67,0.02],[-4.37,0.13],[-3.68,0.24],[-3.43,1.26]],"o":[[-15.151,4.647],[-29.58,-0.12],[0,0],[0.154,6.328],[0.594,2.032],[2.236,1.808],[3.31,0.53],[4.14,0.35],[4.59,0.21],[4.67,0.09],[4.37,-0.01],[3.69,-0.1],[3.59,-0.22],[0,0]],"v":[[49.794,34.341],[40.889,-17.615],[-49.047,-17.989],[-49.233,5.285],[-47.233,24.387],[-43.84,30.754],[-35.716,34.251],[-25.736,35.401],[-13.286,36.171],[0.494,36.601],[14.493,36.701],[27.594,36.501],[38.654,36.021],[49.294,34.541]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0,0],[-4.203,20.923],[31.924,0.663],[0,0],[-1.948,-8.876],[-1.671,-1.454],[-2.84,-0.45],[-3.34,-0.28],[-4.16,-0.18],[-4.6,-0.08],[-4.67,0.02],[-4.37,0.13],[-3.68,0.24],[-3.43,1.26]],"o":[[-17.014,6.105],[-29.58,-0.12],[0,0],[0.062,6.887],[0.832,3.789],[1.937,1.685],[3.31,0.53],[4.14,0.35],[4.59,0.21],[4.67,0.09],[4.37,-0.01],[3.69,-0.1],[3.59,-0.22],[0,0]],"v":[[49.794,34.341],[41.594,-23.648],[-49.647,-23.213],[-49.558,-0.023],[-47.381,24.239],[-43.766,31.345],[-35.716,34.251],[-25.736,35.401],[-13.286,36.171],[0.494,36.601],[14.494,36.701],[27.594,36.501],[38.654,36.021],[49.294,34.541]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[0,0],[-4.31,21.26],[29.58,0.11],[0,0],[-0.444,-5.59],[-3.16,-2.62],[-2.84,-0.45],[-3.34,-0.28],[-4.16,-0.18],[-4.6,-0.08],[-4.67,0.02],[-4.37,0.13],[-3.68,0.24],[-3.43,1.26]],"o":[[-17.25,6.29],[-29.58,-0.12],[0,0],[-2.773,16.167],[0.362,4.56],[2.21,1.84],[3.31,0.53],[4.14,0.35],[4.59,0.21],[4.67,0.09],[4.37,-0.01],[3.69,-0.1],[3.59,-0.22],[0,0]],"v":[[49.794,34.341],[42.684,-31.583],[-49.223,-32.376],[-50.223,-14.303],[-49.191,19.054],[-43.756,31.421],[-35.716,34.251],[-25.736,35.401],[-13.286,36.171],[0.494,36.601],[14.494,36.701],[27.594,36.501],[38.654,36.021],[49.294,34.541]],"c":true}]},{"t":41,"s":[{"i":[[0,0],[-4.31,21.26],[29.58,0.11],[0.729,-13.637],[-2.596,-16.19],[-3.16,-2.62],[-2.84,-0.45],[-3.34,-0.28],[-4.16,-0.18],[-4.6,-0.08],[-4.67,0.02],[-4.37,0.13],[-3.68,0.24],[-3.43,1.26]],"o":[[-17.25,6.29],[-29.58,-0.12],[0,0],[-0.606,11.333],[0.649,4.051],[2.21,1.84],[3.31,0.53],[4.14,0.35],[4.59,0.21],[4.67,0.09],[4.37,-0.01],[3.69,-0.1],[3.59,-0.22],[0,0]],"v":[[49.794,34.341],[43.684,-36.249],[-49.556,-36.709],[-51.223,-19.469],[-49.9,18.887],[-43.756,31.421],[-35.716,34.251],[-25.736,35.401],[-13.286,36.171],[0.494,36.601],[14.494,36.701],[27.594,36.501],[38.654,36.021],[49.294,34.541]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.980392156863,0.81568627451,0.564705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Fill 8","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":3583,"st":-17,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"Folder back 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":11,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[509.689,578.168,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.278431372549,0.286274509804,0.627450980392,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":177,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.90588241278,0.725490196078,0.454901990704,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[-0.478,2.311],[-0.2,5.873],[-0.009,0.31],[-0.039,0.46],[0.318,8.583],[-0.061,0.318],[-0.624,-5.547],[0,0],[3.45,0.69],[0,0],[0,0],[0,0],[0,0],[0,0],[-26.247,0.049]],"o":[[3.58,-0.22],[1.161,-5.62],[0.013,-0.377],[0.184,-6.359],[0.523,-6.099],[-0.01,-0.271],[0.286,-1.49],[0.382,3.394],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[26.246,-0.049]],"v":[[44.257,-46.898],[44.647,-49.211],[45.327,-48.851],[45.36,-49.88],[44.981,-49.348],[44.887,-47.366],[44.857,-48.257],[44.927,-50.475],[45.154,-50.291],[-45.826,-51.271],[-45.456,-50.302],[-45.592,-48.794],[-45.586,-48.25],[-45.581,-47.825],[-45.579,-47.68],[-4.771,-49.365]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[-0.011,-1.816],[0.062,1.037],[-0.001,0.033],[0.031,1.047],[-0.061,-0.825],[-0.015,-0.011],[-0.093,-0.419],[0,0],[3.45,0.69],[-0.189,-3.089],[0,0],[0.042,-1.084],[0,0],[0,0],[-25.262,-0.666]],"o":[[0.66,-0.164],[-0.186,1.251],[0.001,-0.029],[0.028,-0.675],[0.078,-5.196],[0.061,0.912],[0.111,0.089],[0.09,0.526],[0,0],[0,0],[0.189,3.089],[0,0],[-0.042,1.084],[0,0],[0,0],[25.238,0.167]],"v":[[44.793,-18.572],[45.483,-21.82],[45.391,-26.952],[45.395,-27.046],[45.467,-30.126],[45.641,-34.875],[45.673,-35.184],[45.541,-37.099],[45.487,-38.291],[-45.493,-39.271],[-44.714,-32.086],[-44.72,-24.326],[-44.816,-22.082],[-44.717,-20.416],[-44.84,-19.228],[-2.429,-16.081]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[0,0],[-0.05,0.011],[0.042,0.862],[-0.002,0.029],[0.005,0.754],[-0.036,0.386],[-0.007,0.156],[-0.107,2.895],[0,0],[3.45,0.69],[-0.248,-3.965],[0.01,-1.116],[0.021,-0.542],[0.034,-0.44],[0,0],[-26.369,-0.954]],"o":[[0.543,-0.319],[0.004,-1.393],[0.002,-0.026],[0.038,-0.595],[0.078,-3.485],[0.031,0.312],[0.052,-1.096],[0.09,-2.04],[0,0],[0,0],[0.248,3.965],[-0.01,1.116],[-0.021,0.542],[-0.023,0.299],[0,0],[26.357,0.704]],"v":[[44.463,-12.235],[45.211,-17.349],[45.255,-23.589],[45.261,-23.671],[45.37,-26.258],[45.501,-31.131],[45.557,-34.679],[45.463,-35.058],[45.487,-38.291],[-45.493,-39.271],[-44.605,-28.796],[-44.404,-19.695],[-44.369,-16.415],[-44.32,-14.476],[-44.423,-12.879],[-6.215,-6.951]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[-0.089,1.839],[0.023,0.687],[-0.002,0.025],[-0.02,0.462],[-0.011,1.597],[0.001,0.323],[-0.122,6.209],[0,0],[3.45,0.69],[-0.306,-4.841],[0.021,-2.233],[0,0],[0.069,-0.881],[0,0],[-27.476,-1.241]],"o":[[0.426,-0.475],[0.195,-4.037],[0.002,-0.022],[0.048,-0.516],[0.078,-1.775],[0.002,-0.287],[-0.006,-2.282],[0.091,-4.606],[0,0],[0,0],[0.306,4.841],[-0.021,2.233],[0,0],[-0.047,0.598],[0,0],[27.476,1.241]],"v":[[44.132,-5.898],[44.939,-12.878],[45.119,-20.226],[45.126,-20.297],[45.272,-22.389],[45.361,-27.386],[45.44,-34.173],[45.385,-33.017],[45.487,-38.291],[-45.493,-39.271],[-44.497,-25.505],[-44.087,-15.063],[-43.922,-10.998],[-43.923,-8.536],[-44.007,-6.531],[-10.001,2.179]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[-0.175,1.963],[-0.019,1.687],[-0.001,0.049],[-0.007,0.462],[-0.011,1.589],[-0.028,0.322],[-0.163,6.208],[0,0],[3.45,0.69],[-0.286,-6.835],[0.068,-3.354],[0,0],[0,0],[0,0],[-23.174,-0.045]],"o":[[0.593,-2.6],[0.411,-4.62],[0,-0.022],[0.016,-0.996],[0.078,-4.983],[0.002,-0.292],[0.66,-7.622],[0.207,-7.887],[0,0],[0,0],[0.286,6.835],[-0.069,3.414],[0,0],[0,0],[0,0],[23.174,0.045]],"v":[[42.091,12.977],[44.148,0.956],[45.161,-12.851],[45.162,-12.958],[45.314,-20.681],[45.404,-27.336],[45.607,-31.507],[45.552,-32.017],[45.487,-38.291],[-45.493,-39.271],[-44.31,-22.748],[-43.622,0.089],[-43.701,6.659],[-44.114,9.642],[-44.279,12.802],[-11.199,18.207]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[-1.232,4.97],[-0.013,0.383],[-0.006,0.199],[-0.154,1.176],[0.08,-0.548],[0.004,-0.044],[-0.049,0.106],[0,0],[3.45,0.69],[-0.473,-10.523],[0,0],[0,0],[0.898,-2.465],[0,0],[-26.941,-1.093]],"o":[[5.385,-2.183],[1.745,-7.036],[0.007,-0.208],[0.123,-4.094],[-0.172,-0.9],[-0.003,0.017],[-0.131,1.426],[0.049,-0.106],[0,0],[0,0],[0.139,19.523],[0,0],[0,0],[-1.188,3.259],[0,0],[26.941,1.093]],"v":[[31.424,34.602],[41.564,17.872],[44.661,-7.268],[44.68,-7.878],[44.897,-15.014],[45.033,-22.181],[45.273,-28.34],[45.427,-32.808],[45.487,-38.291],[-45.493,-39.271],[-41.331,-5.104],[-41.837,15.187],[-42.838,23.245],[-44.09,28.301],[-46.34,31.969],[-17.799,37.993]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[-2.311,4.874],[-0.333,2.187],[-0.017,0.253],[-0.132,0.923],[-0.212,2.875],[-0.041,0.752],[-0.087,2.14],[0,0],[3.45,0.69],[-0.196,-15.078],[0.757,-6.678],[0.536,-2.364],[0.648,-2.211],[0,0],[-22.907,-1.026]],"o":[[7.579,-1.739],[2.967,-7.092],[0.008,-0.157],[0.18,-3.631],[0.022,-1.032],[0.007,-0.091],[0.051,-1.519],[0.102,-2.7],[0,0],[0,0],[0.139,10.746],[-0.157,1.382],[-0.214,1.469],[-0.906,3.09],[0,0],[34.903,3.264]],"v":[[26.924,37.352],[39.342,23.22],[44.189,-2.532],[44.226,-3.154],[44.842,-12.403],[45.114,-19.433],[45.343,-25.34],[45.482,-32.086],[45.487,-38.291],[-45.493,-39.271],[-41.997,-3.993],[-42.282,16.097],[-43.227,25.45],[-44.506,30.297],[-46.729,33.469],[-20.094,38.655]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[-3.389,4.778],[-0.653,3.991],[-0.028,0.307],[-0.111,0.671],[-0.505,6.297],[-0.086,1.547],[-0.125,4.174],[0,0],[3.45,0.69],[-0.742,-10.556],[0.125,-2.779],[0.265,-3.071],[0.685,-2.905],[0,0],[-18.873,-0.96]],"o":[[9.774,-1.294],[4.189,-7.147],[0.009,-0.106],[0.238,-3.169],[0.215,-1.165],[0.016,-0.199],[0.233,-4.464],[0.154,-5.293],[0,0],[0,0],[0.806,11.468],[-0.125,2.779],[-0.568,3.151],[-0.685,2.905],[0,0],[19.088,0.88]],"v":[[21.924,37.602],[37.12,28.567],[43.716,2.205],[43.773,1.571],[44.786,-9.792],[45.196,-16.685],[45.412,-22.34],[45.538,-31.364],[45.487,-38.291],[-45.493,-39.271],[-42.164,-8.382],[-42.726,16.841],[-43.616,26.322],[-45.173,32.459],[-47.118,34.969],[-22.39,39.317]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[-4.457,4.685],[-0.974,5.795],[-0.039,0.361],[-0.089,0.418],[-0.797,9.72],[-0.131,2.343],[-0.163,6.208],[0,0],[3.45,0.69],[-0.126,-10.529],[0.187,-4.168],[0.397,-4.607],[0.852,-2.631],[0,0],[-14.839,-0.893]],"o":[[10.051,-0.516],[7.328,-7.703],[0.009,-0.056],[0.295,-2.706],[0.245,-1.15],[0.025,-0.307],[0.414,-7.409],[0.207,-7.887],[0,0],[0,0],[0.139,11.69],[-0.187,4.168],[-0.853,4.726],[-0.852,2.631],[0,0],[15.161,0.773]],"v":[[17.174,39.102],[33.564,33.206],[43.077,7.149],[43.153,6.504],[44.564,-6.764],[45.11,-13.563],[45.356,-19.09],[45.51,-30.392],[45.487,-38.291],[-45.493,-39.271],[-42.331,-1.104],[-42.337,16.584],[-43.172,26.86],[-45.173,34.121],[-47.507,36.469],[-24.685,39.979]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,0],[-4.922,4.13],[-1.685,4.437],[-0.014,0.054],[-0.068,0.457],[-0.777,10.297],[-0.028,0.322],[-0.163,6.208],[0,0],[3.45,0.69],[-0.289,-8.419],[1.021,-8.777],[0,0],[3.352,-3.507],[0,0],[0,0]],"o":[[21.135,-0.766],[1.828,-2.786],[0.008,-0.021],[0.965,-3.613],[0.995,-6.65],[0.025,-0.326],[0.66,-7.622],[0.207,-7.887],[0,0],[0,0],[0.306,8.922],[-1.021,8.777],[0,0],[-3.352,3.507],[0,0],[0,0]],"v":[[10.674,39.686],[34.814,33.289],[39.994,24.316],[41.594,18.449],[42.981,10.069],[44.695,-8.202],[45.19,-19.173],[45.677,-32.558],[45.487,-38.291],[-45.493,-39.271],[-41.831,-9.836],[-41.837,16.309],[-45.088,28.953],[-49.006,34.579],[-56.007,37.969],[-28.372,39.734]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[-3.431,1.278],[-2.373,5.272],[-0.013,0.033],[-0.089,0.453],[-0.219,4.759],[-0.018,0.323],[-0.163,6.208],[0,0],[3.45,0.69],[-0.473,-13.483],[0.187,-5.06],[1.646,-4.532],[0.981,-0.539],[0,0],[0,0]],"o":[[27.246,-0.436],[5.707,-2.108],[0.009,-0.02],[0.274,-0.685],[1.243,-6.319],[0.015,-0.323],[0.446,-7.795],[0.207,-7.887],[0,0],[0,0],[0.473,13.483],[-0.187,5.06],[-2.43,5.769],[-3.724,2.045],[0,0],[0,0]],"v":[[-6.34,40.016],[27.784,37.419],[38.587,25.134],[38.637,25.009],[41.742,15.437],[43.696,1.625],[44.363,-6.702],[45.013,-24.46],[45.487,-38.291],[-45.493,-39.271],[-42.497,-11.897],[-41.837,13.526],[-44.011,25.734],[-51.506,35.208],[-58.315,37.304],[-38.901,39.173]],"c":true}]},{"t":20,"s":[{"i":[[0,0],[-11.363,2.599],[-1.337,2.042],[-1.054,2.897],[-0.187,0.423],[-0.205,5.037],[-0.027,0.322],[-0.146,6.209],[0,0],[3.452,0.681],[-0.168,-11.809],[0,0],[2.034,-5.359],[4.824,-2.192],[0,0],[0,0]],"o":[[3.579,-0.23],[6.392,-1.462],[0.012,-0.019],[1.054,-2.897],[1.014,-2.294],[0.013,-0.323],[0.639,-7.624],[0.186,-7.888],[0,0],[0,0],[0.168,11.809],[0,0],[-1.133,3.641],[-4.584,1.977],[0,0],[0,0]],"v":[[-10.47,40.057],[26,38.298],[35.395,31.795],[38.838,25.15],[40.712,19.296],[43.514,3.465],[44.181,-3.501],[45.276,-25.014],[45.384,-38.414],[-45.599,-39.147],[-43.859,-10.723],[-43.435,11.278],[-45.392,23.945],[-52.515,34.778],[-60.654,36.759],[-46.518,38.602]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.90588241278,0.725490196078,0.454901990704,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-0.115,0.074],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Fill 6","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"Shadow","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[0]},{"t":42,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[461.597,695.146,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":17,"s":[17,17,100]},{"t":30,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.48,-0.56],[10.66,-0.02],[20,0],[-12.36,2.88],[-14.22,0.38],[-12.88,-0.85],[0.51,-2.66]],"o":[[-0.1,0.48],[-10.36,3.95],[-20.02,0.04],[-12.49,-0.83],[14.07,-3.28],[12.89,-0.35],[2.18,0.15],[0,0]],"v":[[57.478,0.585],[55.198,2.145],[21.928,4.895],[-38.122,4.085],[-52.782,-1.725],[-9.232,-4.905],[29.438,-4.145],[57.478,0.585]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933000028133,0.933000028133,0.933000028133,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Fill 4","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3600,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/apps/frontend/src/app/style/github.css b/apps/frontend/src/app/style/github.css index 63d1887a..8ad192a9 100644 --- a/apps/frontend/src/app/style/github.css +++ b/apps/frontend/src/app/style/github.css @@ -5,7 +5,6 @@ font-size: 16px; line-height: 1.6; color: #24292e; - background-color: #ffffff; } /* Headings */ diff --git a/apps/frontend/src/page/index.lazy.tsx b/apps/frontend/src/page/index.lazy.tsx index b68b52d7..89ea1ef0 100644 --- a/apps/frontend/src/page/index.lazy.tsx +++ b/apps/frontend/src/page/index.lazy.tsx @@ -2,6 +2,7 @@ import { Button, Heading } from '@froxy/design/components'; import { createLazyFileRoute, getRouteApi } from '@tanstack/react-router'; import { FaGithub } from 'react-icons/fa'; import { LoginButton } from '@/widget/navigation/LoginButton'; +import { OnBoardingCarousel } from '@/widget/onboarding/OnboardingCarousel'; const { useNavigate } = getRouteApi('/'); @@ -13,14 +14,16 @@ function RouteComponent() { const navigate = useNavigate(); return ( -
-
- frog -
-
- - Gist clone과정을 폴짝! 건너뛰고 테스트 ⭐️ - +
+ +
+
+ + + FROXY + +
+ diff --git a/apps/frontend/src/widget/Header.tsx b/apps/frontend/src/widget/Header.tsx index b5cf98e1..e2d9e49b 100644 --- a/apps/frontend/src/widget/Header.tsx +++ b/apps/frontend/src/widget/Header.tsx @@ -20,7 +20,7 @@ export function Header() { const image = data?.profile || '/image/exampleImage.jpeg'; return ( -
+
diff --git a/apps/frontend/src/widget/lotusList/SuspenseLotusCardList.tsx b/apps/frontend/src/widget/lotusList/SuspenseLotusCardList.tsx index 9ed8437e..f5680ad7 100644 --- a/apps/frontend/src/widget/lotusList/SuspenseLotusCardList.tsx +++ b/apps/frontend/src/widget/lotusList/SuspenseLotusCardList.tsx @@ -13,11 +13,11 @@ export function SuspenseLotusList({ queryOptions }: { queryOptions: LotusLostQue } = useSuspenseQuery(queryOptions); return ( -
+
{lotuses?.map(({ lotus, author }) => ( - +
diff --git a/apps/frontend/src/widget/onboarding/OnBoardingCarousel.tsx b/apps/frontend/src/widget/onboarding/OnBoardingCarousel.tsx new file mode 100644 index 00000000..4ce66bc7 --- /dev/null +++ b/apps/frontend/src/widget/onboarding/OnBoardingCarousel.tsx @@ -0,0 +1,58 @@ +import { useEffect, useRef, useState } from 'react'; +import { AutoPlay, cn } from '@froxy/design'; +import { OnBoardingItems } from './constant'; +import { Carousel, CarouselApi, CarouselContent, CarouselItem, Heading } from '@/components'; + +export function OnBoardingCarousel() { + const [api, setApi] = useState(); + const ref = useRef(null); + + useEffect(() => { + if (!api) { + return; + } + + api.on('select', () => { + if (!ref.current) return; + + ref.current.style.backgroundColor = `#${Math.floor(Math.random() * 16777215).toString(16)}`; + }); + }, [api]); + + return ( + + + {OnBoardingItems.map((item) => ( + +
+
+
{item.icon}
+ +
+
+ {item.title} +
+
+ +
+ {item?.description && ( +
+ {item.description} +
+ )} +
+
+
+
+ ))} +
+
+ ); +} diff --git a/apps/frontend/src/widget/onboarding/constant.tsx b/apps/frontend/src/widget/onboarding/constant.tsx new file mode 100644 index 00000000..7e3aa9e6 --- /dev/null +++ b/apps/frontend/src/widget/onboarding/constant.tsx @@ -0,0 +1,23 @@ +import { FaCheckCircle, FaGithub } from 'react-icons/fa'; + +export const OnBoardingItems = [ + { + icon: , + title: 'Gist clone과정을 폴짝! 건너뛰고 테스트', + description: '손쉽게 Gist를 실행하고, 공유하세요.' + }, + { + icon:
⚡️
, + title: 'Gist 실행, Froxy와 함께라면 순식간에!', + description: 'Froxy는 당신의 시간과 노력을 아껴주는 완벽한 도우미입니다.' + }, + { + icon: , + title: '하나하나 clone하기 힘들죠?', + description: 'Froxy는 Gist를 clone하고, 실행하는 과정을 간소화합니다.' + }, + { + icon:
🔥
, + title: 'Froxy에 맡기고 코드에 집중하세요!' + } +]; diff --git a/apps/frontend/src/widget/onboarding/index.ts b/apps/frontend/src/widget/onboarding/index.ts new file mode 100644 index 00000000..641c4026 --- /dev/null +++ b/apps/frontend/src/widget/onboarding/index.ts @@ -0,0 +1 @@ +export * from './OnBoardingCarousel'; diff --git a/packages/design/package.json b/packages/design/package.json index db636917..e5d2e509 100644 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -33,6 +33,7 @@ "@radix-ui/react-tabs": "^1.1.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", + "embla-carousel-autoplay": "^8.5.1", "embla-carousel-react": "^8.3.1", "lucide-react": "^0.454.0", "react": "^18.3.1", diff --git a/packages/design/src/components/ui/pagination.tsx b/packages/design/src/components/ui/pagination.tsx index 2be29444..834c0f79 100644 --- a/packages/design/src/components/ui/pagination.tsx +++ b/packages/design/src/components/ui/pagination.tsx @@ -49,7 +49,7 @@ PaginationLink.displayName = 'PaginationLink'; const PaginationPrevious = ({ className, ...props }: React.ComponentProps) => ( - Previous + Prev ); PaginationPrevious.displayName = 'PaginationPrevious'; diff --git a/packages/design/src/components/ui/skeleton.tsx b/packages/design/src/components/ui/skeleton.tsx index fdb1390b..7082e14d 100644 --- a/packages/design/src/components/ui/skeleton.tsx +++ b/packages/design/src/components/ui/skeleton.tsx @@ -1,7 +1,7 @@ import { cn } from '@/lib/utils'; function Skeleton({ className, ...props }: React.HTMLAttributes) { - return
; + return
; } export { Skeleton }; diff --git a/packages/design/src/index.ts b/packages/design/src/index.ts index f852f7ba..5837bfb0 100644 --- a/packages/design/src/index.ts +++ b/packages/design/src/index.ts @@ -1,3 +1,7 @@ +import AutoPlay from 'embla-carousel-autoplay'; + export * from '@/components'; export * from '@/lib/utils'; export * from '@radix-ui/react-slot'; + +export { AutoPlay };