├── .github ├── ISSUE_TEMPLATE │ ├── bug-template.md │ └── feature-template.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── LICENSE ├── README.md └── Weekand ├── .swiftlint.yml ├── Podfile ├── Podfile.lock ├── Supporting Files ├── PretendardVariable.ttf └── Preview.swift ├── Weekand.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcshareddata │ └── xcschemes │ └── Weekand.xcscheme ├── Weekand.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ └── IDEWorkspaceChecks.plist └── Weekand ├── API.swift ├── Application ├── AppDelegate.swift └── SceneDelegate.swift ├── Base └── Base.lproj │ └── LaunchScreen.storyboard ├── Data └── UserDataStorage.swift ├── Domain ├── Alarm.swift ├── CompleteStatus.swift ├── Entities │ ├── Category.swift │ ├── Color.swift │ ├── EmojiGiver.swift │ ├── FollwingUser.swift │ ├── ScheduleMain.swift │ ├── ScheduleSummary.swift │ ├── SignUpModel.swift │ ├── UserSummary.swift │ └── UserSummaryTemp.swift ├── Enum │ ├── CategoryOpenType.swift │ ├── Emoji.swift │ ├── ScheduleRepeatType.swift │ ├── ScheduleSort.swift │ ├── Status.swift │ └── UserSort.swift ├── FollowInformationType.swift ├── ImageExtensionType.swift ├── KeyChain │ ├── KeyChainAccount.swift │ ├── KeyChainError.swift │ └── KeyChainManager.swift ├── ProfileSetting.swift ├── ProfileUseCase.swift ├── ScheduleDetail.swift ├── ScheduleDetailUseCase.swift ├── ScheduleInputModel.swift ├── ScheduleRule.swift ├── ScheduleUpdateModel.swift ├── ScheduleWeek.swift ├── StickerSummary.swift ├── TokenManager.swift ├── UseCase │ ├── Main │ │ ├── CategoryUseCase.swift │ │ ├── MainUseCase.swift │ │ ├── ScheduleEditUseCase.swift │ │ └── SearchUseCase.swift │ └── Sign │ │ ├── SignInUseCase.swift │ │ └── SignUpUseCase.swift ├── UserDetail.swift └── UserUpdate.swift ├── Networking ├── Apollo │ ├── Interceptor │ │ ├── RefreshTokenInterceptor.swift │ │ ├── RequestLoggingInterceptor.swift │ │ ├── TokenAddingInterceptor.swift │ │ └── ‌ResponseLoggingInterceptor.swift │ ├── Network.swift │ ├── NetworkInterceptorProvider.swift │ ├── RxApolloClient.swift │ └── Timestamp.swift ├── Error │ ├── CategoryError.swift │ ├── NetworkError.swift │ ├── ScheduleEditError.swift │ ├── SignInError.swift │ └── SignUpError.swift ├── ImageUploader.swift ├── Query │ ├── CompleteSchedule.graphql │ ├── CreateCategory.graphql │ ├── CreateFollowee.graphql │ ├── CreateImageUrl.graphql │ ├── CreateSchedule.graphql │ ├── CreateSticker.graphql │ ├── DeleteFollowee.graphql │ ├── DeleteFollower.graphql │ ├── DeleteSchedule.graphql │ ├── DeleteScheduleFromDate.graphql │ ├── DeleteUser.graphql │ ├── Followees.graphql │ ├── Followers.graphql │ ├── IncompleteSchedule.graphql │ ├── Login.graphql │ ├── Logout.graphql │ ├── MyStickerAdded.graphql │ ├── Notification.graphql │ ├── Reissue.graphql │ ├── ScehduleRule.graphql │ ├── Schedule.graphql │ ├── ScheduleCategories.graphql │ ├── SearchSchedules.graphql │ ├── SearchUsers.graphql │ ├── SendContact.graphql │ ├── SignUp.graphql │ ├── SkipSchedule.graphql │ ├── StickerSummary.graphql │ ├── UpdateCategory.graphql │ ├── UpdatePassword.graphql │ ├── UpdateSchedule.graphql │ ├── UpdateUserDetail.graphql │ ├── UserDetail.graphql │ ├── UserSummary.graphql │ ├── checkDuplicateNickname.graphql │ ├── deleteCategory.graphql │ ├── issueTempPassword.graphql │ ├── scheduleList.graphql │ ├── sendAuthKey.graphql │ └── vaildAuthKey.graphql ├── RefreshTokenInterceptor.swift ├── RequestLoggingInterceptor.swift ├── Timestamp.swift ├── TokenAddingInterceptor.swift └── ‌ResponseLoggingInterceptor.swift ├── Presentation ├── Common │ ├── Coordinator │ │ ├── AlertPopupCoordinator.swift │ │ ├── AppCoordinator.swift │ │ ├── Coordinator.swift │ │ ├── CoordinatorDidFinishDelegate.swift │ │ ├── CoordinatorType.swift │ │ └── SimplePopupCoordinator.swift │ ├── View │ │ ├── WArrowButton.swift │ │ ├── WBottmButton.swift │ │ ├── WButtonTextField.swift │ │ ├── WCalendarView.swift │ │ ├── WCheckBox.swift │ │ ├── WDefaultButton.swift │ │ ├── WEmptyView.swift │ │ ├── WFilledGrayButton.swift │ │ ├── WFilterButtton.swift │ │ ├── WMultiLineTextLabel.swift │ │ ├── WSortButton.swift │ │ ├── WSquareImageView.swift │ │ ├── WTagToggleButton.swift │ │ ├── WTextButton.swift │ │ ├── WTextField.swift │ │ ├── WTextFieldStackView.swift │ │ ├── WTextLabel.swift │ │ ├── WTextView.swift │ │ ├── WTitleLabel.swift │ │ ├── WToastLabel.swift │ │ └── WTypeToggleButton.swift │ ├── ViewController │ │ ├── AlertPopupViewController.swift │ │ ├── BaseNavigationController.swift │ │ ├── BaseViewController.swift │ │ ├── BottomSheetViewController.swift │ │ ├── PopupViewController.swift │ │ └── SimplePopupViewController.swift │ └── ViewModel │ │ ├── AlertPopupViewModel.swift │ │ ├── SimplePopupViewModel.swift │ │ └── ViewModelType.swift ├── MainScene │ ├── Category │ │ ├── Coordinator │ │ │ ├── CategoryAddCoordinator.swift │ │ │ ├── CategoryCoordinator.swift │ │ │ ├── CategoryEditCoordinatorType.swift │ │ │ └── CategoryModifyCoordinator.swift │ │ ├── View │ │ │ ├── CategoryDataSource.swift │ │ │ ├── CategoryDetailViewController.swift │ │ │ ├── CategoryEditViewController.swift │ │ │ ├── CategoryListViewController.swift │ │ │ ├── ColorSheetViewController.swift │ │ │ ├── ScheduleDataSource.swift │ │ │ └── SubView │ │ │ │ ├── CategoryDetailHeaderView.swift │ │ │ │ ├── CategoryDetailTableViewCell.swift │ │ │ │ ├── CategoryDetailToolBar.swift │ │ │ │ ├── CategoryListHeaderView.swift │ │ │ │ ├── CategoryListTableViewCell.swift │ │ │ │ ├── ColorStackView.swift │ │ │ │ ├── ColorsCollectionViewCell.swift │ │ │ │ ├── DateTimeLabel.swift │ │ │ │ ├── FilterTableViewCell.swift │ │ │ │ ├── OpenTypeCollectionViewCell.swift │ │ │ │ └── OpenTypeStackView.swift │ │ └── ViewModel │ │ │ ├── CategoryAddViewModel.swift │ │ │ ├── CategoryDetailViewModel.swift │ │ │ ├── CategoryEditViewModelType.swift │ │ │ ├── CategoryListViewModel.swift │ │ │ ├── CategoryModifyViewModel.swift │ │ │ └── ColorSheetViewModel.swift │ ├── Common │ │ └── View │ │ │ ├── SortDropDownCell.swift │ │ │ ├── SortDropDownCell.xib │ │ │ ├── WCategoryTitleLabel.swift │ │ │ ├── WEmojiView.swift │ │ │ ├── WIconLabel.swift │ │ │ └── WStatusTimeLabel.swift │ ├── Main │ │ ├── Coordinator │ │ │ └── MainCoordinator.swift │ │ ├── View │ │ │ ├── AlarmViewController.swift │ │ │ ├── MainScheduleDataSource.swift │ │ │ ├── MainViewController.swift │ │ │ ├── Sheet │ │ │ │ ├── EmojiSheet │ │ │ │ │ ├── EmojiSheetViewController.swift │ │ │ │ │ ├── EmojiTabViewController.swift │ │ │ │ │ └── EmojiTableViewController.swift │ │ │ │ ├── MonthlyCalendarSheet.swift │ │ │ │ └── StickerAddSheet.swift │ │ │ └── SubView │ │ │ │ ├── AlarmTableViewCell.swift │ │ │ │ ├── MainView │ │ │ │ ├── MainCalendarView.swift │ │ │ │ ├── MainCollectionViewCell.swift │ │ │ │ ├── MainProfileView.swift │ │ │ │ ├── MainTableViewCell.swift │ │ │ │ └── MainViewHeader.swift │ │ │ │ └── Sheet │ │ │ │ ├── EmojiTableViewCell.swift │ │ │ │ └── StickerCollectionViewCell.swift │ │ └── ViewModel │ │ │ ├── AlarmViewModel.swift │ │ │ ├── MainViewModel.swift │ │ │ └── Sheet │ │ │ ├── EmojiTableViewModel.swift │ │ │ ├── MonthlyCalendarSheetViewModel.swift │ │ │ └── StickerAddSheetViewModel.swift │ ├── ScheduleDetail │ │ ├── Coordinator │ │ │ └── ScheduleDetailCoordinator.swift │ │ ├── View │ │ │ ├── ScheduleDetailViewController.swift │ │ │ └── Views │ │ │ │ ├── CompleteCollectionViewCell.swift │ │ │ │ ├── ScheduleCategoryStackView.swift │ │ │ │ ├── ScheduleCompleteToolBar.swift │ │ │ │ └── ScheduleInformationStackView.swift │ │ └── ViewModel │ │ │ └── ScheduleDetailViewModel.swift │ ├── ScheduleEdit │ │ ├── Coordinator │ │ │ ├── ScheduleAddCoordinator.swift │ │ │ ├── ScheduleEditCoordinatorType.swift │ │ │ └── ScheduleModifyCoordinator.swift │ │ ├── View │ │ │ ├── CategoryListSheetViewController.swift │ │ │ ├── DefaultRepeatViewController.swift │ │ │ ├── RepeatSheetViewController.swift │ │ │ ├── RepeatTabViewController.swift │ │ │ ├── ScheduleEditViewController.swift │ │ │ ├── Views │ │ │ │ ├── AddInformationContainerView.swift │ │ │ │ ├── CategorySheetTableViewCell.swift │ │ │ │ ├── CategoryStackView.swift │ │ │ │ ├── DateStackView.swift │ │ │ │ ├── MemoStackView.swift │ │ │ │ ├── RepeatRadioStackView.swift │ │ │ │ ├── RepeatStackView.swift │ │ │ │ ├── RepeatTableViewCell.swift │ │ │ │ ├── TimeStackView.swift │ │ │ │ └── WeekCollectionViewCell.swift │ │ │ └── WeekRepeatViewController.swift │ │ └── ViewModel │ │ │ ├── CategoryListSheetViewModel.swift │ │ │ ├── DefaultRepeatViewModel.swift │ │ │ ├── ScheduleAddViewModel.swift │ │ │ ├── ScheduleEditViewModelType.swift │ │ │ ├── ScheduleModifyViewModel.swift │ │ │ └── WeekRepeatViewModel.swift │ └── Search │ │ ├── Coordinator │ │ └── UserSearchCoordinator.swift │ │ ├── View │ │ ├── InformationSheetController.swift │ │ ├── SubView │ │ │ ├── SearchHeaderView.swift │ │ │ └── UserTableViewCell.swift │ │ └── UserSearchViewController.swift │ │ └── ViewModel │ │ ├── InformationSheetViewModel.swift │ │ └── UserSearchViewModel.swift ├── ProfileScene │ ├── AccountSetting │ │ ├── View │ │ │ ├── ContactCompleteViewController.swift │ │ │ ├── ContactViewController.swift │ │ │ ├── PasswordChangeViewController.swift │ │ │ └── ResignWarningPopupViewController.swift │ │ └── ViewModel │ │ │ ├── ContactViewModel.swift │ │ │ ├── PasswordChangeViewModel.swift │ │ │ └── WarningPopupViewModel.swift │ ├── Follow │ │ ├── View │ │ │ ├── FollowViewController.swift │ │ │ └── SubView │ │ │ │ └── FollowTableViewCell.swift │ │ └── ViewModel │ │ │ └── FollowViewModel.swift │ ├── Profile │ │ ├── Coordinator │ │ │ ├── ProfileCoordinator.swift │ │ │ └── ResignWarningPopupCoordinator.swift │ │ ├── View │ │ │ ├── ProfileViewController.swift │ │ │ └── SubView │ │ │ │ ├── ProfileDetailBlockView.swift │ │ │ │ ├── ProfileDetailCollectionCell.swift │ │ │ │ ├── ProfileDetailCollectionStackView.swift │ │ │ │ ├── ProfileDetailHelperView.swift │ │ │ │ ├── ProfileDetailInteractoinBlockView.swift │ │ │ │ ├── ProfileDetailJobInterestView.swift │ │ │ │ └── ProfileDetailView.swift │ │ └── ViewModel │ │ │ └── ProfileViewModel.swift │ └── ProfileEdit │ │ ├── View │ │ ├── ProfileEditViewController.swift │ │ ├── SelectionSheetViewController.swift │ │ └── SubView │ │ │ ├── ProfileEditFieldView.swift │ │ │ └── ProfileEditSelectionView.swift │ │ └── ViewModel │ │ ├── ProfileEditViewModel.swift │ │ └── SelectionSheetViewModel.swift ├── SignScene │ ├── SignIn │ │ ├── Coordinator │ │ │ ├── PasswordFindCoordinator.swift │ │ │ └── SignInCoordinator.swift │ │ ├── View │ │ │ ├── PasswordFindViewController.swift │ │ │ └── SignInViewController.swift │ │ └── ViewModel │ │ │ ├── PasswordFindViewModel.swift │ │ │ └── SignInViewModel.swift │ ├── SignUp │ │ ├── Coordinator │ │ │ └── SignUpCoordinator.swift │ │ ├── View │ │ │ ├── SignUpAddInfomationViewController.swift │ │ │ ├── SignUpTermsViewController.swift │ │ │ ├── SignUpViewController.swift │ │ │ └── SubView │ │ │ │ ├── BasePaddingLabel.swift │ │ │ │ ├── InformationCollectionViewCell.swift │ │ │ │ ├── InformationGroupStackView.swift │ │ │ │ └── InputGroupStackView.swift │ │ └── ViewModel │ │ │ ├── SignUpAddInformationViewModel.swift │ │ │ ├── SignUpTermsViewModel.swift │ │ │ └── SignUpViewModel.swift │ └── Welcome │ │ ├── Coordinator │ │ └── WelcomeCoordinator.swift │ │ ├── View │ │ └── WelcomeViewController.swift │ │ └── ViewModel │ │ └── WelcomeViewModel.swift └── Utils │ ├── APIModelExtensions │ ├── RepeatType+extension.swift │ ├── ScheduleCategoryOpenType+extension.swift │ ├── ScheduleStatus+extension.swift │ └── Week+extension.swift │ ├── DesignSystem │ ├── ColorSet.swift │ ├── CommonShape.swift │ ├── EmptySceneType.swift │ ├── Font.swift │ └── Inset.swift │ ├── Extensions │ ├── DateExtension.swift │ ├── FSCalendar+RxExtension.swift │ ├── NSMutableAttributedString+extension.swift │ ├── String+trimWhiteSpace.swift │ ├── UIButton+setImageInset.swift │ ├── UIColor+hex.swift │ ├── UIScrollView+scrollToTop.swift │ └── UIVIewController+modality.swift │ └── Manager │ ├── ImageCacheManager.swift │ ├── WDateFormatter.swift │ └── WRepeatTextManager.swift └── Resources ├── Assets.xcassets ├── AccentColor.colorset │ └── Contents.json ├── AppIcon.appiconset │ ├── 1024.png │ ├── 120-1.png │ ├── 120.png │ ├── 152.png │ ├── 167.png │ ├── 180.png │ ├── 20.png │ ├── 29.png │ ├── 40-1.png │ ├── 40-2.png │ ├── 40.png │ ├── 58-1.png │ ├── 58.png │ ├── 60.png │ ├── 76.png │ ├── 80-1.png │ ├── 80.png │ ├── 87.png │ └── Contents.json ├── ContactBanner.imageset │ ├── ContactIcon.png │ ├── ContactIcon@2x.png │ ├── ContactIcon@3x.png │ └── Contents.json ├── Contents.json ├── Logo.imageset │ ├── Contents.json │ ├── logo.png │ ├── logo@2x.png │ └── logo@3x.png ├── SplashImage.imageset │ ├── Contents.json │ ├── iPhone 8.png │ ├── iPhone 8@2x.png │ └── iPhone 8@3x.png ├── Symbols │ ├── Arrows │ │ ├── Contents.json │ │ ├── arrow.down.imageset │ │ │ ├── Contents.json │ │ │ ├── arrow.down.png │ │ │ ├── arrow.down2x.png │ │ │ └── arrow.down3x.png │ │ ├── arrow.left.imageset │ │ │ ├── Contents.json │ │ │ ├── arrow.left.png │ │ │ ├── arrow.left2x.png │ │ │ └── arrow.left3x.png │ │ ├── arrow.right.imageset │ │ │ ├── Contents.json │ │ │ ├── arrow.right.png │ │ │ ├── arrow.right2x.png │ │ │ └── arrow.right3x.png │ │ ├── back.imageset │ │ │ ├── Contents.json │ │ │ ├── back1x.png │ │ │ ├── back2x.png │ │ │ └── back3x.png │ │ ├── chevron.down.imageset │ │ │ ├── Contents.json │ │ │ ├── chevron_down.png │ │ │ ├── chevron_down@2x.png │ │ │ └── chevron_down@3x.png │ │ ├── chevron.right.imageset │ │ │ ├── Contents.json │ │ │ ├── chevron_right.png │ │ │ ├── chevron_right@2x.png │ │ │ └── chevron_right@3x.png │ │ └── chevron.up.imageset │ │ │ ├── Contents.json │ │ │ ├── chevron_up.png │ │ │ ├── chevron_up@2x.png │ │ │ └── chevron_up@3x.png │ ├── Button │ │ ├── Contents.json │ │ ├── category.update.imageset │ │ │ ├── Contents.json │ │ │ ├── updateCategory.png │ │ │ ├── updateCategory2x.png │ │ │ └── updateCategory3x.png │ │ ├── close.imageset │ │ │ ├── Contents.json │ │ │ ├── closeTest.png │ │ │ ├── closeTest2x.png │ │ │ └── closeTest3x.png │ │ ├── edit.imageset │ │ │ ├── Contents.json │ │ │ ├── Vector.png │ │ │ ├── Vector@2x.png │ │ │ └── Vector@3x.png │ │ ├── folder.plus.imageset │ │ │ ├── Contents.json │ │ │ ├── addCategory1x.png │ │ │ ├── addCategory2x.png │ │ │ └── addCategory3x.png │ │ ├── plus.circle.fill.imageset │ │ │ ├── Contents.json │ │ │ ├── plus.circle.fill.png │ │ │ ├── plus.circle.fill2x.png │ │ │ └── plus.circle.fill3x.png │ │ ├── plus.imageset │ │ │ ├── Contents.json │ │ │ ├── plus.png │ │ │ ├── plus@2x.png │ │ │ └── plus@3x.png │ │ └── setting.imageset │ │ │ ├── Contents.json │ │ │ ├── setting.png │ │ │ ├── setting@2x.png │ │ │ └── setting@3x.png │ ├── Contents.json │ ├── Emoji │ │ ├── CongratsEmoji.imageset │ │ │ ├── Contents.json │ │ │ ├── emoji_congrats.png │ │ │ ├── emoji_congrats@2x.png │ │ │ └── emoji_congrats@3x.png │ │ ├── Contents.json │ │ ├── CoolEmoji.imageset │ │ │ ├── Contents.json │ │ │ ├── emoji_cool.png │ │ │ ├── emoji_cool@2x.png │ │ │ └── emoji_cool@3x.png │ │ ├── GoodEmoji.imageset │ │ │ ├── Contents.json │ │ │ ├── emoji_good.png │ │ │ ├── emoji_good@2x.png │ │ │ └── emoji_good@3x.png │ │ ├── SmileEmoji.imageset │ │ │ ├── Contents.json │ │ │ ├── emoji_smile.png │ │ │ ├── emoji_smile@2x.png │ │ │ └── emoji_smile@3x.png │ │ └── sticker.button.imageset │ │ │ ├── Contents.json │ │ │ ├── sticker_button.png │ │ │ ├── sticker_button@2x.png │ │ │ └── sticker_button@3x.png │ ├── EmptyViewEmoji │ │ ├── Contents.json │ │ ├── alarmEmoji.empty.imageset │ │ │ ├── Contents.json │ │ │ ├── alarmEmoji.empty.png │ │ │ ├── alarmEmoji.empty2x.png │ │ │ └── alarmEmoji.empty3x.png │ │ ├── followersEmoji.empty.imageset │ │ │ ├── Contents.json │ │ │ ├── followersEmoji.empty.png │ │ │ ├── followersEmoji.empty2x.png │ │ │ └── followersEmoji.empty3x.png │ │ ├── followingEmoji.empty.imageset │ │ │ ├── Contents.json │ │ │ ├── followingEmoji.empty.png │ │ │ ├── followingEmoji.empty2x.png │ │ │ └── followingEmoji.empty3x.png │ │ ├── scheduleEmoji.empty.imageset │ │ │ ├── Contents.json │ │ │ ├── emptyEmoji.schedule.png │ │ │ ├── emptyEmoji.schedule2x.png │ │ │ └── emptyEmoji.schedule3x.png │ │ └── searchEmoji.empty.imageset │ │ │ ├── Contents.json │ │ │ ├── userEmoji.empty.png │ │ │ ├── userEmoji.empty2x.png │ │ │ └── userEmoji.empty3x.png │ ├── Information │ │ ├── Contents.json │ │ ├── alarm.imageset │ │ │ ├── Contents.json │ │ │ ├── alarm.png │ │ │ ├── alarm@2x.png │ │ │ └── alarm@3x.png │ │ ├── box.filled.imageset │ │ │ ├── Contents.json │ │ │ ├── rectangle.png │ │ │ ├── rectangle@2x.png │ │ │ └── rectangle@3x.png │ │ ├── calendar.imageset │ │ │ ├── Contents.json │ │ │ ├── calendar.png │ │ │ ├── calendar2x.png │ │ │ └── calendar3x.png │ │ ├── date.end.imageset │ │ │ ├── Contents.json │ │ │ ├── date_end.png │ │ │ ├── date_end@2x.png │ │ │ └── date_end@3x.png │ │ ├── date.start.imageset │ │ │ ├── Contents.json │ │ │ ├── date_start.png │ │ │ ├── date_start@2x.png │ │ │ └── date_start@3x.png │ │ ├── default.person.imageset │ │ │ ├── Contents.json │ │ │ ├── Frame 1548.png │ │ │ ├── Frame 1548@2x.png │ │ │ └── Frame 1548@3x.png │ │ ├── search.imageset │ │ │ ├── Contents.json │ │ │ ├── search.png │ │ │ ├── search@2x.png │ │ │ └── search@3x.png │ │ ├── time.imageset │ │ │ ├── Contents.json │ │ │ ├── time.png │ │ │ ├── time2x.png │ │ │ └── time3x.png │ │ ├── visibility.disabled.imageset │ │ │ ├── Contents.json │ │ │ ├── visibility_disabled.png │ │ │ ├── visibility_disabled@2x.png │ │ │ └── visibility_disabled@3x.png │ │ └── visibility.imageset │ │ │ ├── Contents.json │ │ │ ├── visibility.png │ │ │ ├── visibility@2x.png │ │ │ └── visibility@3x.png │ ├── State │ │ ├── Contents.json │ │ ├── state.completed.imageset │ │ │ ├── Contents.json │ │ │ ├── work_completed.png │ │ │ ├── work_completed@2x.png │ │ │ └── work_completed@3x.png │ │ ├── state.hold.imageset │ │ │ ├── Contents.json │ │ │ ├── work_beforecheck.png │ │ │ ├── work_beforecheck@2x.png │ │ │ └── work_beforecheck@3x.png │ │ ├── state.incomplete.imageset │ │ │ ├── Contents.json │ │ │ ├── work_uncompleted.png │ │ │ ├── work_uncompleted@2x.png │ │ │ └── work_uncompleted@3x.png │ │ ├── state.proceeding.imageset │ │ │ ├── Contents.json │ │ │ ├── work_ongoing.png │ │ │ ├── work_ongoing@2x.png │ │ │ └── work_ongoing@3x.png │ │ └── state.upcomming.imageset │ │ │ ├── Contents.json │ │ │ ├── work_prearranged.png │ │ │ ├── work_prearranged@2x.png │ │ │ └── work_prearranged@3x.png │ └── User Input │ │ ├── Contents.json │ │ ├── checkmark.fill.imageset │ │ ├── CheckBox.png │ │ ├── CheckBox2x.png │ │ ├── CheckBox3x.png │ │ └── Contents.json │ │ ├── radio.disabled.imageset │ │ ├── Contents.json │ │ ├── radio_disabled.png │ │ ├── radio_disabled@2x.png │ │ └── radio_disabled@3x.png │ │ └── radio.enabled.imageset │ │ ├── Contents.json │ │ ├── radio_enabled.png │ │ ├── radio_enabled2x.png │ │ └── radio_enabled3x.png └── emptyImage.imageset │ ├── Bounding box.png │ ├── Bounding box@2x.png │ ├── Bounding box@3x.png │ └── Contents.json ├── Constants.swift └── Info.plist /.github/ISSUE_TEMPLATE/bug-template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug template 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 버그 설명 11 | 12 | ## 현재 동작 13 | 14 | ## 기대 동작 15 | 16 | ## 해당 버그를 발생시키는 방법 17 | 18 | --- 19 | 20 | ### 참고 문헌: 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature template 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: feature 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 기능 설명 11 | 12 | ## 현재 동작 13 | 14 | ## 기대 동작 15 | 16 | --- 17 | 18 | ### 참고 문헌: 19 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 15 | 16 | ## ✏️ 어떠한 기능이 추가되었나요 17 | - [ ] 구현 완료한 기능 설명 18 | - [ ] 구현할 계획 기능 설명 19 | 20 | ## ❗ 새롭게 알게된 점 21 | 22 | 23 | ## ❓ 고민중인 부분 24 | 25 | --- 26 | 27 | ### 📖 참고문헌 28 | 29 | -------------------------------------------------------------------------------- /Weekand/.swiftlint.yml: -------------------------------------------------------------------------------- 1 | identifier_name: 2 | min_length: 3 | warning: 0 4 | max_length: 5 | warning: 40 6 | error: 50 7 | 8 | disabled_rules: 9 | - trailing_whitespace 10 | - line_length 11 | - vertical_whitespace 12 | - unused_optional_binding 13 | - identifier_name 14 | - function_body_length 15 | - file_length 16 | - function_parameter_count 17 | - unused_closure_parameter 18 | - implicit_getter 19 | 20 | excluded: 21 | - Pods 22 | - Weekand/API.swift 23 | - Weekand/AppDelegate.swift 24 | - Weekand/SceneDelegate.swift 25 | 26 | included: 27 | - Weekand 28 | -------------------------------------------------------------------------------- /Weekand/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '14.0' 3 | 4 | target 'Weekand' do 5 | # Comment the next line if you don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for Weekand 9 | 10 | # Rx 11 | pod 'RxSwift' 12 | pod 'RxCocoa' 13 | pod 'RxGesture' 14 | pod 'AlignedCollectionViewFlowLayout' 15 | 16 | # UIKit 17 | pod 'SnapKit' 18 | pod 'Then' 19 | 20 | # Cooperation 21 | pod 'SwiftLint' 22 | 23 | # Apollo 24 | pod 'Apollo' 25 | 26 | # Custom VUI 27 | pod 'DropDown', '2.3.13' 28 | pod 'FSCalendar' 29 | pod 'Tabman' 30 | 31 | end 32 | -------------------------------------------------------------------------------- /Weekand/Supporting Files/PretendardVariable.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Supporting Files/PretendardVariable.ttf -------------------------------------------------------------------------------- /Weekand/Weekand.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Weekand/Weekand.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Weekand/Weekand.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Weekand/Weekand.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Weekand/Weekand/Data/UserDataStorage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserDataStorage.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/04. 6 | // 7 | 8 | import Foundation 9 | 10 | /// 로그인한 유저 정보를 저장하는 싱글톤 객체 11 | final class UserDataStorage { 12 | 13 | static let shared = UserDataStorage() 14 | 15 | var userID: String? 16 | 17 | init() { 18 | 19 | } 20 | } 21 | 22 | extension UserDataStorage { 23 | func setUserID(id: String) { 24 | UserDataStorage.shared.userID = id 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Alarm.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Alarm.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/29. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Alarm: Hashable { 11 | static func == (lhs: Alarm, rhs: Alarm) -> Bool { 12 | lhs.uuid == rhs.uuid 13 | } 14 | 15 | func hash(into hasher: inout Hasher) { 16 | hasher.combine(uuid) 17 | } 18 | 19 | let uuid = UUID() 20 | let id: String 21 | let message: String 22 | let type: String 23 | } 24 | 25 | extension Alarm { 26 | init (model: NotificationQuery.Data.Notification.Notification) { 27 | 28 | self.id = model.id 29 | self.message = model.message 30 | self.type = model.type.rawValue 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/CompleteStatus.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CompleteStatus.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/08/01. 6 | // 7 | 8 | import Foundation 9 | 10 | enum CompleteStatus { 11 | case complete, incomplete 12 | 13 | var description: String { 14 | switch self { 15 | case .complete: 16 | return "완료" 17 | case .incomplete: 18 | return "미완료" 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Entities/Category.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Category.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/06/12. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Category: Hashable { 11 | 12 | static func == (lhs: Category, rhs: Category) -> Bool { 13 | lhs.identifier == rhs.identifier 14 | } 15 | 16 | func hash(into hasher: inout Hasher) { 17 | hasher.combine(identifier) 18 | } 19 | 20 | let identifier = UUID() 21 | let serverID: String 22 | let color: String 23 | let name: String 24 | let openType: CategoryOpenType 25 | 26 | init(serverID: String, color: String, name: String, openType: CategoryOpenType) { 27 | 28 | self.serverID = serverID 29 | self.color = color 30 | self.name = name 31 | self.openType = openType 32 | } 33 | 34 | init(model: ScehduleRuleQuery.Data.ScheduleRule.Category) { 35 | 36 | self.serverID = model.id 37 | self.color = model.color 38 | self.name = model.name 39 | self.openType = model.openType.toEntity() 40 | } 41 | 42 | init(model: ScheduleQuery.Data.Schedule.Category) { 43 | 44 | self.serverID = model.id 45 | self.color = model.color 46 | self.name = model.name 47 | self.openType = model.openType.toEntity() 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Entities/Color.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Color.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/06/26. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Color: Hashable { 11 | static func == (lhs: Color, rhs: Color) -> Bool { 12 | lhs.id == rhs.id 13 | } 14 | 15 | func hash(into hasher: inout Hasher) { 16 | hasher.combine(id) 17 | } 18 | 19 | let id: Int 20 | let hexCode: String 21 | } 22 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Entities/EmojiGiver.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmojiGiver.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/12. 6 | // 7 | 8 | import Foundation 9 | 10 | struct EmojiGiver: Hashable { 11 | 12 | static func == (lhs: EmojiGiver, rhs: EmojiGiver) -> Bool { 13 | lhs.id == rhs.id 14 | } 15 | 16 | func hash(into hasher: inout Hasher) { 17 | hasher.combine(id) 18 | } 19 | 20 | let id = UUID() 21 | 22 | let userId: String 23 | let name: String 24 | let imagePath: String 25 | let emoji: Emoji 26 | } 27 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Entities/ScheduleMain.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleList.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/06/04. 6 | // 7 | 8 | import Foundation 9 | 10 | /// 메인 일정 리스트의 일정 정보 11 | struct ScheduleMain: Hashable { 12 | 13 | static func == (lhs: ScheduleMain, rhs: ScheduleMain) -> Bool { 14 | lhs.id == rhs.id 15 | } 16 | 17 | func hash(into hasher: inout Hasher) { 18 | hasher.combine(id) 19 | } 20 | 21 | let id = UUID() 22 | 23 | let scheduleId: String 24 | let color: String 25 | let status: Status 26 | let name: String 27 | let dateStart: Date 28 | let dateEnd: Date 29 | let stickerCount: Int 30 | let stickerNameList: [Emoji] 31 | let repeatType: ScheduleRepeatType 32 | 33 | 34 | } 35 | 36 | extension ScheduleMain { 37 | init(model: ScheduleListQuery.Data.Schedule.Schedule) { 38 | 39 | self.scheduleId = model.id 40 | self.color = model.category.color 41 | self.status = Status(rawValue: model.status.rawValue) ?? .upcoming 42 | self.name = model.name 43 | self.dateStart = model.dateTimeStart.toDate() 44 | self.dateEnd = model.dateTimeEnd.toDate() 45 | self.stickerCount = model.stickerCount 46 | self.stickerNameList = model.stickerNames.map { Emoji(rawValue: $0.rawValue) ?? .good } 47 | self.repeatType = model.repeatType.toEntity() 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Entities/SignUpModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // User.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/10. 6 | // 7 | 8 | import Foundation 9 | 10 | struct SignUpModel { 11 | var email: String? 12 | var password: String? 13 | var nickname: String? 14 | var jobs: [String]? 15 | var interests: [String]? 16 | var signUpAgreed: Bool? 17 | } 18 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Entities/UserSummary.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserSummary.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/06/23. 6 | // 7 | 8 | import Foundation 9 | 10 | /// 기본 유저 정보 (이름, 한줄평, 프로필 사진) 11 | struct UserSummary { 12 | 13 | static let defaultData = UserSummary(id: "", name: "", goal: "We can do, Weekand!", imagePath: "") 14 | 15 | let userId: String // 유저 id 16 | let name: String // 유저 이름 17 | let goal: String // 한줄 목표 18 | let imagePath: String // 프로필 사진 19 | 20 | init (id: String, name: String, goal: String, imagePath: String) { 21 | self.userId = id 22 | self.name = name 23 | self.goal = goal 24 | self.imagePath = imagePath 25 | } 26 | 27 | init (model: UserSummaryQuery.Data.User) { 28 | self.userId = model.id 29 | self.name = model.nickname 30 | self.goal = model.goal ?? "" 31 | self.imagePath = model.profileImageUrl 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Entities/UserSummaryTemp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserSummaryTemp.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/15. 6 | // 7 | 8 | import Foundation 9 | 10 | /// 기본 유저 정보 (이름, 한줄평, 프로필 사진) 11 | struct UserSummaryTemp: Hashable { 12 | 13 | static func == (lhs: UserSummaryTemp, rhs: UserSummaryTemp) -> Bool { 14 | lhs.id == rhs.id 15 | } 16 | 17 | func hash(into hasher: inout Hasher) { 18 | hasher.combine(id) 19 | } 20 | 21 | let id = UUID() 22 | let userSummaryId: String 23 | let name: String // 유저 이름 24 | let goal: String // 한줄 목표 25 | let imagePath: String // 프로필 사진 26 | } 27 | 28 | extension UserSummaryTemp { 29 | 30 | init (model: UserFolloweesQuery.Data.Followee.Followee) { 31 | self.userSummaryId = model.id 32 | self.name = model.nickname 33 | self.goal = model.goal ?? "" 34 | self.imagePath = model.profileImageUrl 35 | } 36 | 37 | init (model: UserFollowersQuery.Data.Follower.Follower) { 38 | self.userSummaryId = model.id 39 | self.name = model.nickname 40 | self.goal = model.goal ?? "" 41 | self.imagePath = model.profileImageUrl 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Enum/CategoryOpenType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // OpenType.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/15. 6 | // 7 | 8 | import Foundation 9 | 10 | enum CategoryOpenType: String { 11 | case allOpen 12 | case followerOpen 13 | case closed 14 | 15 | var description: String { 16 | switch self { 17 | case .allOpen: 18 | return "전체 공개" 19 | case .followerOpen: 20 | return "친구 공개" 21 | case .closed: 22 | return "비공개" 23 | } 24 | } 25 | } 26 | 27 | extension CategoryOpenType { 28 | static var openTypeList: [CategoryOpenType] { 29 | return [.allOpen, .followerOpen, .closed] 30 | } 31 | 32 | var listIndex: Int { 33 | switch self { 34 | case .allOpen: 35 | return 0 36 | case .followerOpen: 37 | return 1 38 | case .closed: 39 | return 2 40 | } 41 | } 42 | } 43 | 44 | extension CategoryOpenType { 45 | func toModel() -> ScheduleCategoryOpenType { 46 | switch self { 47 | case .allOpen: 48 | return ScheduleCategoryOpenType.allOpen 49 | case .followerOpen: 50 | return ScheduleCategoryOpenType.followerOpen 51 | case .closed: 52 | return ScheduleCategoryOpenType.closed 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Enum/Emoji.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Emoji.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/07. 6 | // 7 | 8 | import Foundation 9 | 10 | /// 스티커 종류 11 | enum Emoji: String { 12 | case good = "GOOD" // 좋아요 13 | case awesome = "LIKE" // 대단해요 14 | case cool = "COOL" // 멋져요 15 | case support = "CHEER_UP" // 응원해요 16 | 17 | /// 스티커 이미지 이름 18 | var imageName: String { 19 | switch self { 20 | case .good: return "SmileEmoji" 21 | case .awesome: return "GoodEmoji" 22 | case .cool: return "CoolEmoji" 23 | case .support: return "CongratsEmoji" 24 | } 25 | } 26 | 27 | /// 스티커 이름 28 | var emojiName: String { 29 | switch self { 30 | case .good: return "좋아요" 31 | case .awesome: return "대단해요" 32 | case .cool: return "멋져요" 33 | case .support: return "응원해요" 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Enum/ScheduleRepeatType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleRepeatType.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/21. 6 | // 7 | 8 | import Foundation 9 | 10 | enum ScheduleRepeatType { 11 | case daily 12 | case weekly 13 | case monthly 14 | case yearly 15 | case once 16 | 17 | var description: String { 18 | switch self { 19 | case .daily: 20 | return "매일" 21 | case .weekly: 22 | return "매주" 23 | case .monthly: 24 | return "매월" 25 | case .yearly: 26 | return "매년" 27 | case .once: 28 | return "" 29 | } 30 | } 31 | } 32 | 33 | extension ScheduleRepeatType { 34 | func toModel() -> RepeatType { 35 | switch self { 36 | case .daily: 37 | return RepeatType.daily 38 | case .weekly: 39 | return RepeatType.weekly 40 | case .monthly: 41 | return RepeatType.monthly 42 | case .yearly: 43 | return RepeatType.yearly 44 | case .once: 45 | return RepeatType.once 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Enum/ScheduleSort.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Filter.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/06/27. 6 | // 7 | 8 | import Foundation 9 | 10 | enum ScheduleSort: CaseIterable { 11 | case dateCreatedDESC 12 | case dateCreatedASC 13 | case nameCreatedASC 14 | case nameCreatedDESC 15 | 16 | var description: String { 17 | switch self { 18 | case .dateCreatedDESC: 19 | return "최신순" 20 | case .dateCreatedASC: 21 | return "오래된순" 22 | case .nameCreatedASC: 23 | return "오름차순" 24 | case .nameCreatedDESC: 25 | return "내림차순" 26 | } 27 | } 28 | } 29 | 30 | extension ScheduleSort { 31 | func toModel() -> ScheduleCategorySort { 32 | switch self { 33 | case .dateCreatedASC: 34 | return ScheduleCategorySort.dateCreatedAsc 35 | case .dateCreatedDESC: 36 | return ScheduleCategorySort.dateCreatedDesc 37 | case .nameCreatedASC: 38 | return ScheduleCategorySort.nameAsc 39 | case .nameCreatedDESC: 40 | return ScheduleCategorySort.nameDesc 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Enum/Status.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Status.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/15. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | 11 | /// 일정 상태 정보 12 | enum Status: String { 13 | case upcoming = "NOT_YET" 14 | case completed = "COMPLETED" 15 | case incompleted = "INCOMPLETED" 16 | case undetermined = "UNDETERMINED" 17 | 18 | var icon: StatusIcon { 19 | switch self { 20 | case .upcoming: return .upcoming 21 | case .completed: return .completed 22 | case .incompleted: return .incompleted 23 | case .undetermined: return .undetermined 24 | } 25 | } 26 | 27 | } 28 | 29 | /// 일정상태 아이콘 정보 30 | enum StatusIcon: String { 31 | 32 | // TODO: Status 열거형 안으로 편입 33 | case upcoming = "state.upcomming" 34 | case proceeding = "state.proceeding" 35 | case completed = "state.completed" 36 | case incompleted = "state.incomplete" 37 | case undetermined = "state.hold" 38 | 39 | var tintColor: UIColor { 40 | switch self { 41 | case .upcoming: return .gray600 42 | case .proceeding: return .gray600 43 | case .completed: return .mainColor 44 | case .incompleted: return .gray600 45 | case .undetermined: return .gray300 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/Enum/UserSort.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserSort.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/18. 6 | // 7 | 8 | import Foundation 9 | 10 | enum UserSort: CaseIterable { 11 | case followerCountDESC 12 | case dateCreatedDESC 13 | case nicknameASC 14 | case nicknameDESC 15 | 16 | var description: String { 17 | switch self { 18 | case .followerCountDESC: 19 | return "팔로워순" 20 | case .dateCreatedDESC: 21 | return "최신순" 22 | case .nicknameASC: 23 | return "오름차순" 24 | case .nicknameDESC: 25 | return "내림차순" 26 | } 27 | } 28 | } 29 | 30 | extension UserSort { 31 | func toModel() -> SearchUserSort { 32 | switch self { 33 | case .dateCreatedDESC: 34 | return SearchUserSort.dateCreatedDesc 35 | case .followerCountDESC: 36 | return SearchUserSort.followerCountDesc 37 | case .nicknameASC: 38 | return SearchUserSort.nicknameAsc 39 | case .nicknameDESC: 40 | return SearchUserSort.nicknameDesc 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/FollowInformationType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FollowInformationType.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/31. 6 | // 7 | 8 | import Foundation 9 | 10 | enum FollowInformationType: String { 11 | case followee = "팔로잉" 12 | case follower = "팔로워" 13 | 14 | var descriptionSuffix: String { 15 | switch self { 16 | case .followee: return "님이 팔로우하는 친구들이에요" 17 | case .follower: return "님을 팔로우하는 친구들이에요" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/ImageExtensionType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageExtensionType.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/29. 6 | // 7 | 8 | import Foundation 9 | 10 | /// 이미지 확장자 11 | enum ImageExtensionType: String { 12 | case jpeg = "JPEG" 13 | case png = "PNG" 14 | } 15 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/KeyChain/KeyChainAccount.swift: -------------------------------------------------------------------------------- 1 | // 2 | // KeyChainAccount.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/24. 6 | // 7 | 8 | import Foundation 9 | 10 | enum KeyChainAccount { 11 | case accessToken 12 | case refreshToken 13 | case userId 14 | case password 15 | 16 | var description: String { 17 | return String(describing: self) 18 | } 19 | 20 | var keyChainClass: CFString { 21 | switch self { 22 | case .accessToken: 23 | return kSecClassGenericPassword 24 | case .refreshToken: 25 | return kSecClassGenericPassword 26 | case .userId: 27 | return kSecClassInternetPassword 28 | case .password: 29 | return kSecClassInternetPassword 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/KeyChain/KeyChainError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // KeyChainError.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/24. 6 | // 7 | 8 | import Foundation 9 | 10 | enum KeyChainError: LocalizedError { 11 | case unhandledError(status: OSStatus) 12 | case itemNotFound 13 | 14 | var errorDescription: String? { 15 | switch self { 16 | case .unhandledError(let status): 17 | return "KeyChain unhandle Error: \(status)" 18 | case .itemNotFound: 19 | return "KeyChain item Not Found" 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/ProfileSetting.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ProfileSetting.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/21. 6 | // 7 | 8 | import Foundation 9 | 10 | /// 내 프로필 화면 하단 설정 11 | enum ProfileSetting: String { 12 | 13 | case contact = "문의하기" 14 | case accessibility = "접근성" 15 | case password = "비밀번호 변경" 16 | 17 | case logout = "로그아웃" 18 | case signOut = "회원탈퇴" 19 | 20 | var isCritical: Bool { 21 | switch self { 22 | case .contact: return false 23 | case .accessibility: return false 24 | case .password: return false 25 | 26 | case .logout: return true 27 | case .signOut: return true 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/ScheduleDetail.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleDetail.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/28. 6 | // 7 | 8 | import Foundation 9 | 10 | /// 일정 상세 정보 11 | struct ScheduleDetail { 12 | 13 | let scheduleId: String 14 | let category: Category 15 | let name: String 16 | let dateStart: Date 17 | let dateEnd: Date 18 | let repeatType: ScheduleRepeatType 19 | let repeatSelectedValue: [ScheduleWeek] 20 | let repeatEnd: Date? 21 | let memo: String 22 | let dateSkip: [Date]? 23 | let status: Status 24 | 25 | init(model: ScheduleQuery.Data.Schedule) { 26 | self.scheduleId = model.id 27 | self.category = Category(model: model.category) 28 | self.name = model.name 29 | self.dateStart = model.dateTimeStart.toDate() 30 | self.dateEnd = model.dateTimeEnd.toDate() 31 | self.repeatType = model.repeatType.toEntity() 32 | self.repeatSelectedValue = model.repeatSelectedValue.map { $0.toEntity() } 33 | self.repeatEnd = model.repeatEnd?.toDate() 34 | self.memo = model.memo ?? "" 35 | self.dateSkip = model.dateSkip?.map { $0.toDate() } 36 | self.status = model.status.toEntity() 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/ScheduleDetailUseCase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleDetailUseCase.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/28. 6 | // 7 | 8 | import Foundation 9 | import RxSwift 10 | 11 | final class ScheduleDetailUseCase { 12 | func schedule(scheduleId: String, requestDate: Date) -> Single { 13 | NetWork.shared.fetch(query: ScheduleQuery(scheduleId: scheduleId, date: requestDate.toTimestamp()), 14 | cachePolicy: .fetchIgnoringCacheCompletely, 15 | queue: .main) 16 | .map { $0.schedule } 17 | .asSingle() 18 | } 19 | 20 | func completeSchedule(scheduleId: String, requestDate: Date) -> Single { 21 | NetWork.shared.perform(mutation: CompleteScheduleMutation(scheduleId: scheduleId, date: requestDate.toTimestamp())) 22 | .map { $0.completeSchedule } 23 | .asSingle() 24 | } 25 | 26 | func incompleteSchedule(scheduleId: String, requestDate: Date) -> Single { 27 | NetWork.shared.perform(mutation: IncompleteScheduleMutation(scheduleId: scheduleId, date: requestDate.toTimestamp())) 28 | .map { $0.incompleteSchedule } 29 | .asSingle() 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/ScheduleInputModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleInputModel.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/22. 6 | // 7 | 8 | import Foundation 9 | 10 | struct ScheduleInputModel { 11 | let name: String 12 | let categoryId: String 13 | let dateStart: Date 14 | let dateEnd: Date 15 | let repeatType: ScheduleRepeatType 16 | let repeatSelectedValue: [ScheduleWeek]? 17 | let repeatEnd: Date? 18 | let memo: String? 19 | } 20 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/ScheduleRule.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleDetail.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/26. 6 | // 7 | 8 | import Foundation 9 | 10 | /// 일정 상세 정보 11 | struct ScheduleRule { 12 | 13 | let scheduleId: String 14 | let category: Category 15 | let name: String 16 | let dateStart: Date 17 | let dateEnd: Date 18 | let repeatType: ScheduleRepeatType 19 | let repeatSelectedValue: [ScheduleWeek] 20 | let repeatEnd: Date? 21 | let memo: String 22 | 23 | init(model: ScehduleRuleQuery.Data.ScheduleRule) { 24 | 25 | self.scheduleId = model.id 26 | self.category = Category(model: model.category) 27 | self.name = model.name 28 | self.dateStart = model.dateTimeStart.toDate() 29 | self.dateEnd = model.dateTimeEnd.toDate() 30 | self.repeatType = model.repeatType.toEntity() 31 | self.repeatSelectedValue = model.repeatSelectedValue.map { $0.toEntity() } 32 | self.repeatEnd = model.repeatEnd?.toDate() 33 | self.memo = model.memo ?? "" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/ScheduleUpdateModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleUpdateModel.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/27. 6 | // 7 | 8 | import Foundation 9 | 10 | struct ScheduleUpdateModel { 11 | let scheduleId: String 12 | let requestDateTime: Date 13 | let name: String 14 | let categoryId: String 15 | let dateStart: Date 16 | let dateEnd: Date 17 | let repeatType: ScheduleRepeatType 18 | let repeatSelectedValue: [ScheduleWeek]? 19 | let repeatEnd: Date? 20 | let memo: String? 21 | } 22 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/ScheduleWeek.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleWeek.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/22. 6 | // 7 | 8 | import Foundation 9 | 10 | enum ScheduleWeek: CaseIterable { 11 | case sunday, monday, tuesday, wednesday, thursday, friday, saturday 12 | 13 | var description: String { 14 | switch self { 15 | case .sunday: 16 | return "일" 17 | case .monday: 18 | return "월" 19 | case .tuesday: 20 | return "화" 21 | case .wednesday: 22 | return "수" 23 | case .thursday: 24 | return "목" 25 | case .friday: 26 | return "금" 27 | case .saturday: 28 | return "토" 29 | } 30 | } 31 | } 32 | 33 | extension ScheduleWeek { 34 | func toModel() -> Week { 35 | switch self { 36 | case .sunday: 37 | return Week.sunday 38 | case .monday: 39 | return Week.monday 40 | case .tuesday: 41 | return Week.tuesday 42 | case .wednesday: 43 | return Week.wednesday 44 | case .thursday: 45 | return Week.thursday 46 | case .friday: 47 | return Week.friday 48 | case .saturday: 49 | return Week.saturday 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/StickerSummary.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StickerSummary.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/28. 6 | // 7 | 8 | import Foundation 9 | 10 | /// 스티커 데이터 (전체) 11 | struct StickerSummary { 12 | 13 | let totalCount: Int 14 | let scheduleStickers: [Emoji: Int] 15 | let scheduleStickerUser: [EmojiGiver] 16 | } 17 | 18 | extension StickerSummary { 19 | 20 | init(model: StickerSummaryQuery.Data.ScheduleStickerSummary) { 21 | totalCount = model.totalCount 22 | 23 | var stickers: [Emoji: Int] = [:] 24 | model.scheduleStickers.forEach { 25 | guard let emoji = Emoji(rawValue: $0.name.rawValue) else { return } 26 | stickers[emoji] = $0.stickerCount 27 | } 28 | scheduleStickers = stickers 29 | 30 | scheduleStickerUser = model.scheduleStickerUsers.map { 31 | 32 | EmojiGiver(userId: $0.user.id, name: $0.user.nickname, imagePath: $0.user.profileImageUrl, emoji: Emoji(rawValue: $0.stickerName.rawValue) ?? Emoji.good) 33 | } 34 | 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/UseCase/Main/SearchUseCase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SearchUseCase.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/19. 6 | // 7 | 8 | import Foundation 9 | import RxSwift 10 | 11 | final class SearchUseCase { 12 | func SearchUsers(searchQuery: String, jobs: [String], interests: [String], sort: UserSort, page: Int, size: Int) 13 | -> Single { 14 | NetWork.shared.fetch( 15 | query: SearchUsersQuery(searchQuery: searchQuery, jobs: jobs, interests: interests, sort: sort.toModel(), page: page, size: size), 16 | cachePolicy: .fetchIgnoringCacheCompletely, 17 | queue: DispatchQueue.main) 18 | .map { $0.searchUsers } 19 | .asSingle() 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/UseCase/Sign/SignInUseCase.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SignInUseCase.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/08. 6 | // 7 | 8 | import Foundation 9 | import RxSwift 10 | 11 | typealias Tokens = LoginQuery.Data.Login 12 | 13 | final class SignInUseCase { 14 | 15 | func login(email: String, password: String) -> Single { 16 | return NetWork.shared 17 | .fetch(query: LoginQuery(email: email, password: password), cachePolicy: .fetchIgnoringCacheCompletely, queue: DispatchQueue.main) 18 | .map { 19 | Tokens(refreshToken: $0.login.refreshToken, accessToken: $0.login.accessToken) 20 | } 21 | .asSingle() 22 | } 23 | 24 | func issueTempPassword(email: String) -> Single { 25 | return NetWork.shared 26 | .perform(mutation: IssueTempPasswordMutation(email: email)) 27 | .map { 28 | $0.issueTempPassword 29 | } 30 | .asSingle() 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/UserDetail.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserDetail.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/22. 6 | // 7 | 8 | import Foundation 9 | 10 | struct UserDetail { 11 | 12 | static let defaultData = UserDetail(userId: "", email: "", name: "", goal: "", imagePath: "", followee: 0, follower: 0, job: [], interest: [], followed: false) 13 | 14 | let userId: String // 유저 id 15 | let email: String // 유저 이메일 16 | let name: String // 유저 이름 17 | let goal: String // 한줄 목표 18 | let imagePath: String // 프로필 사진 19 | let followee: Int // 팔로워 20 | let follower: Int // 팔로잉 21 | let job: [String] // 직업 22 | let interest: [String] // 관심사 23 | let followed: Bool // 팔로우 여부 24 | } 25 | 26 | extension UserDetail { 27 | 28 | init (model: UserDetailQuery.Data.User) { 29 | userId = model.id 30 | email = model.email 31 | name = model.nickname 32 | goal = model.goal ?? "" 33 | imagePath = model.profileImageUrl 34 | followee = model.followeeCount 35 | follower = model.followerCount 36 | job = model.jobs 37 | interest = model.interests 38 | followed = model.followed 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Weekand/Weekand/Domain/UserUpdate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserUpdate.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/23. 6 | // 7 | 8 | import Foundation 9 | 10 | /// 유저 정보 업데이트에 사용 11 | struct UserUpdate { 12 | 13 | let name: String? // 유저 이름 14 | let goal: String? // 한줄 목표 15 | var imageFileName: String? // 프로필 사진 16 | let job: [String] // 직업 17 | let interest: [String] // 관심사 18 | } 19 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Apollo/Interceptor/RefreshTokenInterceptor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RefreshTokenInterceptor.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/24. 6 | // 7 | 8 | import Apollo 9 | import RxSwift 10 | 11 | class RefreshTokenInterceptor: ApolloInterceptor { 12 | 13 | func interceptAsync(chain: RequestChain, request: HTTPRequest, response: HTTPResponse?, completion: @escaping (Result, Error>) -> Void) where Operation: GraphQLOperation { 14 | if let response = response { 15 | 16 | if let error = response.parsedResponse?.errors?.first, 17 | error.description == NetworkError.expiredToken.errorDescription { 18 | TokenManager.shared.isExpired = true 19 | TokenManager.shared.reissue { result in 20 | switch result { 21 | case .success: 22 | chain.retry(request: request, completion: completion) 23 | case .failure(let error): 24 | chain.handleErrorAsync(error, request: request, response: response, completion: completion) 25 | } 26 | } 27 | } else { 28 | chain.proceedAsync(request: request, 29 | response: response, 30 | completion: completion) 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Apollo/Interceptor/RequestLoggingInterceptor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RequestLoggingInterceptor.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/29. 6 | // 7 | 8 | import Apollo 9 | import OSLog 10 | 11 | class RequestLoggingInterceptor: ApolloInterceptor { 12 | 13 | func interceptAsync( 14 | chain: RequestChain, 15 | request: HTTPRequest, 16 | response: HTTPResponse?, 17 | completion: @escaping (Result, Error>) -> Void) { 18 | 19 | let logger = Logger() 20 | logger.log(level: .debug, "Outgoing request: \(String(describing: request))") 21 | 22 | chain.proceedAsync(request: request, 23 | response: response, 24 | completion: completion) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Apollo/NetworkInterceptorProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NetworkInterceptorProvider.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/08. 6 | // 7 | 8 | import Foundation 9 | import Apollo 10 | 11 | class NetworkInterceptorProvider: InterceptorProvider { 12 | 13 | private let store: ApolloStore 14 | private let client: URLSessionClient 15 | 16 | init(store: ApolloStore, 17 | client: URLSessionClient) { 18 | self.store = store 19 | self.client = client 20 | } 21 | 22 | func interceptors(for operation: Operation) -> [ApolloInterceptor] { 23 | return [ 24 | MaxRetryInterceptor(), 25 | CacheReadInterceptor(store: self.store), 26 | TokenAddingInterceptor(), 27 | RequestLoggingInterceptor(), 28 | NetworkFetchInterceptor(client: self.client), 29 | ResponseLoggingInterceptor(), 30 | ResponseCodeInterceptor(), 31 | JSONResponseParsingInterceptor(cacheKeyForObject: self.store.cacheKeyForObject), 32 | RefreshTokenInterceptor(), 33 | AutomaticPersistedQueryInterceptor(), 34 | CacheWriteInterceptor(store: self.store) 35 | ] 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Apollo/Timestamp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Timestamp.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/20. 6 | // 7 | 8 | import Foundation 9 | import Apollo 10 | 11 | public typealias Timestamp = Int64 12 | 13 | extension Timestamp: JSONDecodable, JSONEncodable { 14 | 15 | public var jsonValue: JSONValue { 16 | return Int64(self) 17 | } 18 | 19 | public init(jsonValue value: JSONValue) throws { 20 | 21 | guard let timestamp = value as? Int64 else { 22 | throw JSONDecodingError.couldNotConvert(value: value, to: Date.self) 23 | } 24 | 25 | self = Int64(timestamp) 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Error/CategoryError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CategoryError.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/19. 6 | // 7 | 8 | import Foundation 9 | 10 | enum CategoryError { 11 | case duplicatedName 12 | case minimumCategoryCount 13 | 14 | var serverDescription: String? { 15 | switch self { 16 | case .minimumCategoryCount: 17 | return "최소 2개 이상의 카테고리가 존재할 시 삭제 가능합니다." 18 | case .duplicatedName: 19 | return "해당 카테고리명은 이미 사용중입니다." 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Error/NetworkError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NetworkError.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/23. 6 | // 7 | 8 | import Foundation 9 | 10 | enum NetworkError: LocalizedError { 11 | case expiredToken 12 | 13 | var errorDescription: String? { 14 | switch self { 15 | case .expiredToken: 16 | return "유효기간이 만료된 JWT입니다." 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Error/ScheduleEditError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleEditError.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/29. 6 | // 7 | 8 | import Foundation 9 | 10 | enum ScheduleEditError { 11 | case startEndTimeEqually 12 | 13 | var serverDescription: String? { 14 | switch self { 15 | case .startEndTimeEqually: 16 | return "시작 일시와 종료 일시를 확인해주세요." 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Error/SignInError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SignInError.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/26. 6 | // 7 | 8 | import Foundation 9 | 10 | enum SignInError { 11 | case notFoundUser 12 | case notMatchIdPassword 13 | 14 | var serverDescription: String { 15 | switch self { 16 | case .notFoundUser: 17 | return "존재하지 않는 유저입니다." 18 | case .notMatchIdPassword: 19 | return "이메일, 비밀번호가 일치하지 않습니다." 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Error/SignUpError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NetworkError.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/10. 6 | // 7 | 8 | import Foundation 9 | 10 | enum SignUpError: LocalizedError { 11 | case duplicatedError 12 | 13 | var errorDescription: String? { 14 | switch self { 15 | case .duplicatedError: 16 | return "이미 등록된 이메일입니다." 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/ImageUploader.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageUploader.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/29. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | 11 | final class ImageUploader { 12 | 13 | func uploadImage(image: UIImage, url: String, filename: String) { 14 | 15 | let url = URL(string: url) 16 | let session = URLSession.shared 17 | 18 | var urlRequest = URLRequest(url: url!) 19 | urlRequest.httpMethod = "PUT" 20 | urlRequest.setValue("image/png", forHTTPHeaderField: "Content-Type") 21 | urlRequest.httpBody = image.pngData()! 22 | 23 | let task = session.dataTask(with: urlRequest) { data, response, error in 24 | 25 | if error == nil { 26 | print("\(#function): success") 27 | 28 | } else { 29 | print("\(#function): \(String(describing: error))") 30 | } 31 | } 32 | 33 | task.resume() 34 | 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/CompleteSchedule.graphql: -------------------------------------------------------------------------------- 1 | mutation CompleteSchedule($scheduleId: ID!, $date: Timestamp!) { 2 | completeSchedule(input: { 3 | scheduleId: $scheduleId, 4 | date: $date 5 | }) 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/CreateCategory.graphql: -------------------------------------------------------------------------------- 1 | mutation CreateCategory($name: String!, $color: String!, $openType: ScheduleCategoryOpenType!) { 2 | createCategory(scheduleCategoryInput: { 3 | name: $name, 4 | color: $color, 5 | openType: $openType 6 | }) 7 | } 8 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/CreateFollowee.graphql: -------------------------------------------------------------------------------- 1 | mutation CreateFollowee($id: ID!) { 2 | createFollow(input: { targetUserId: $id }) 3 | } 4 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/CreateImageUrl.graphql: -------------------------------------------------------------------------------- 1 | mutation createImageUrl($type: UserProfileImageExtensionType!) { 2 | createUserProfileImageS3PresignedUrl(input: { extension: $type }) { 3 | url 4 | filename 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/CreateSchedule.graphql: -------------------------------------------------------------------------------- 1 | mutation CreateSchedule($input: ScheduleInput!) { 2 | createSchedule(input: $input) 3 | } 4 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/CreateSticker.graphql: -------------------------------------------------------------------------------- 1 | mutation CreateSticker($id: ID!, $sticker: ScheduleStickerName!, $date: Timestamp!) { 2 | createScheduleSticker(input: { 3 | scheduleId: $id, 4 | scheduleStickerName: $sticker, 5 | scheduleDate: $date 6 | }) 7 | } 8 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/DeleteFollowee.graphql: -------------------------------------------------------------------------------- 1 | mutation DeleteFollowee($id: ID!) { 2 | deleteFollowee(input: { targetUserId: $id }) 3 | } 4 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/DeleteFollower.graphql: -------------------------------------------------------------------------------- 1 | mutation DeleteFollower($id: ID!) { 2 | deleteFollower(input: { targetUserId: $id }) 3 | } 4 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/DeleteSchedule.graphql: -------------------------------------------------------------------------------- 1 | mutation DeleteSchedule($scheduleId: ID!) { 2 | deleteSchedule(input: { 3 | scheduleId: $scheduleId 4 | }) 5 | } 6 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/DeleteScheduleFromDate.graphql: -------------------------------------------------------------------------------- 1 | mutation DeleteScheduleFromDate($scheduleId: ID!, $date: Timestamp!) { 2 | deleteScheduleFromDate(input: { 3 | scheduleId: $scheduleId 4 | date: $date 5 | }) 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/DeleteUser.graphql: -------------------------------------------------------------------------------- 1 | mutation DeleteUser { 2 | deleteUser 3 | } 4 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/Followees.graphql: -------------------------------------------------------------------------------- 1 | query Followees($page: Int!, $size: Int!) { 2 | followees(page: $page, size: $size) { 3 | paginationInfo { 4 | hasNext 5 | } 6 | followees { 7 | id 8 | nickname 9 | profileImageUrl 10 | } 11 | } 12 | } 13 | 14 | query UserFollowees($id: ID, $page: Int!, $size: Int!) { 15 | followees(userId: $id, page: $page, size: $size) { 16 | paginationInfo { 17 | hasNext 18 | } 19 | followees { 20 | id 21 | nickname 22 | profileImageUrl 23 | goal 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/Followers.graphql: -------------------------------------------------------------------------------- 1 | query Followers($page: Int!, $size: Int!) { 2 | followers(page: $page, size: $size) { 3 | paginationInfo { 4 | hasNext 5 | } 6 | followers { 7 | id 8 | nickname 9 | profileImageUrl 10 | } 11 | } 12 | } 13 | 14 | query UserFollowers($id: ID, $page: Int!, $size: Int!) { 15 | followers(userId: $id, page: $page, size: $size) { 16 | paginationInfo { 17 | hasNext 18 | } 19 | followers { 20 | id 21 | nickname 22 | profileImageUrl 23 | goal 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/IncompleteSchedule.graphql: -------------------------------------------------------------------------------- 1 | mutation IncompleteSchedule($scheduleId: ID!, $date: Timestamp!) { 2 | incompleteSchedule(input: { 3 | scheduleId: $scheduleId, 4 | date: $date 5 | }) 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/Login.graphql: -------------------------------------------------------------------------------- 1 | query Login($email: String!, $password: String!) { 2 | login(loginInput: { 3 | email: $email, 4 | password: $password 5 | }){ 6 | refreshToken, 7 | accessToken 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/Logout.graphql: -------------------------------------------------------------------------------- 1 | mutation Logout { 2 | logout 3 | } 4 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/MyStickerAdded.graphql: -------------------------------------------------------------------------------- 1 | query MyStickerAdded($id: ID!, $date: Timestamp!) { 2 | scheduleStickerSummary(scheduleId: $id, selectedDate: $date) { 3 | myScheduleSticker { 4 | stickerName 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/Notification.graphql: -------------------------------------------------------------------------------- 1 | query Notification($page: Int!, $size: Int!) { 2 | notifications(page: $page, size: $size) { 3 | paginationInfo { 4 | hasNext 5 | } 6 | notifications { 7 | id 8 | message 9 | type 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/Reissue.graphql: -------------------------------------------------------------------------------- 1 | query Reissue { 2 | reissue { 3 | accessToken 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/ScehduleRule.graphql: -------------------------------------------------------------------------------- 1 | query ScehduleRule($scheduleId: ID!) { 2 | scheduleRule(scheduleId: $scheduleId) { 3 | id 4 | name 5 | category { 6 | id 7 | name 8 | color 9 | openType 10 | } 11 | dateTimeStart 12 | dateTimeEnd 13 | repeatType 14 | repeatSelectedValue 15 | repeatEnd 16 | memo 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/Schedule.graphql: -------------------------------------------------------------------------------- 1 | query Schedule($scheduleId: ID!, $date: Timestamp!) { 2 | schedule(scheduleId: $scheduleId, date: $date) { 3 | id 4 | name 5 | category { 6 | id 7 | name 8 | color 9 | openType 10 | } 11 | dateTimeStart 12 | dateTimeEnd 13 | repeatType 14 | repeatSelectedValue 15 | repeatEnd 16 | memo 17 | dateSkip 18 | status 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/ScheduleCategories.graphql: -------------------------------------------------------------------------------- 1 | query ScheduleCategories($sort: ScheduleCategorySort!, $page: Int!, $size: Int!) { 2 | scheduleCategories(sort: $sort, page: $page, size: $size) { 3 | paginationInfo { 4 | hasNext 5 | } 6 | scheduleCategories { 7 | id 8 | name 9 | color 10 | openType 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/SearchSchedules.graphql: -------------------------------------------------------------------------------- 1 | query searchSchedules($sort: ScheduleCategorySort!, $page: Int!, $size: Int!, $searchQuery: String, $categoryId: ID!) { 2 | searchSchedules(sort: $sort, page: $page, size: $size, searchQuery: $searchQuery, categoryId: $categoryId) { 3 | paginationInfo{ 4 | hasNext 5 | } 6 | schedules { 7 | id 8 | name 9 | category { 10 | id 11 | color 12 | } 13 | dateTimeStart 14 | dateTimeEnd 15 | repeatType 16 | repeatSelectedValue 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/SearchUsers.graphql: -------------------------------------------------------------------------------- 1 | query SearchUsers($searchQuery: String, $jobs: [String!], $interests: [String!], $sort: SearchUserSort, $page: Int!, $size: Int!) { 2 | searchUsers(searchQuery: $searchQuery, jobs: $jobs, interests: $interests, sort: $sort, page: $page, size: $size) { 3 | paginationInfo { 4 | hasNext 5 | } 6 | users { 7 | id 8 | profileImageUrl 9 | nickname 10 | goal 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/SendContact.graphql: -------------------------------------------------------------------------------- 1 | mutation SendContact($message: String!) { 2 | inquiry(contents: $message) 3 | } 4 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/SignUp.graphql: -------------------------------------------------------------------------------- 1 | mutation SignUp($signUpInput: SignUpInput!) { 2 | signUp(signUpInput: $signUpInput) 3 | } 4 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/SkipSchedule.graphql: -------------------------------------------------------------------------------- 1 | mutation SkipSchedule($scheduleId: ID!, $date: Timestamp!) { 2 | skipSchedule(input: { 3 | scheduleId: $scheduleId 4 | date: $date 5 | }) 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/StickerSummary.graphql: -------------------------------------------------------------------------------- 1 | query StickerSummary($id: ID!, $date: Timestamp!) { 2 | scheduleStickerSummary(scheduleId: $id, selectedDate: $date) { 3 | totalCount 4 | scheduleStickers { 5 | name 6 | stickerCount 7 | } 8 | scheduleStickerUsers { 9 | user { 10 | id 11 | nickname 12 | profileImageUrl 13 | } 14 | stickerName 15 | } 16 | myScheduleSticker { 17 | user { 18 | id 19 | nickname 20 | profileImageUrl 21 | } 22 | stickerName 23 | } 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/UpdateCategory.graphql: -------------------------------------------------------------------------------- 1 | mutation UpdateCategory($categoryId: ID!, $scheduleCategoryInput: ScheduleCategoryInput!) { 2 | updateCategory(categoryId: $categoryId, scheduleCategoryInput: $scheduleCategoryInput) { 3 | name 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/UpdatePassword.graphql: -------------------------------------------------------------------------------- 1 | mutation UpdatePassword($old: String!, $new: String!) { 2 | updatePassword(passwordInput: { oldPassword: $old, newPassword: $new }) 3 | } 4 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/UpdateSchedule.graphql: -------------------------------------------------------------------------------- 1 | mutation UpdateSchedule($input: UpdateScheduleInput!) { 2 | updateSchedule(input: $input) 3 | } 4 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/UpdateUserDetail.graphql: -------------------------------------------------------------------------------- 1 | mutation UpdateUserDetail($imageName: String!, $nickname: String!, $goal: String!, $jobs: [String!]!, $interests: [String!]!) { 2 | updateUserProfile(input: { 3 | profileImageFilename: $imageName, 4 | nickname: $nickname, 5 | goal: $goal, 6 | jobs: $jobs, 7 | interests: $interests 8 | }) { 9 | id 10 | email 11 | nickname 12 | profileImageUrl 13 | goal 14 | followeeCount 15 | followerCount 16 | jobs 17 | interests 18 | followed 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/UserDetail.graphql: -------------------------------------------------------------------------------- 1 | query UserDetail($id: ID) { 2 | user(id: $id) { 3 | id 4 | email 5 | nickname 6 | profileImageUrl 7 | goal 8 | followerCount 9 | followeeCount 10 | jobs 11 | interests 12 | followed 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/UserSummary.graphql: -------------------------------------------------------------------------------- 1 | query UserSummary($id: ID) { 2 | user(id: $id) { 3 | id 4 | nickname 5 | profileImageUrl 6 | goal 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/checkDuplicateNickname.graphql: -------------------------------------------------------------------------------- 1 | query checkDuplicateNickname($nickname: String!) { 2 | checkDuplicateNickname(nickname: $nickname) 3 | } 4 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/deleteCategory.graphql: -------------------------------------------------------------------------------- 1 | mutation deleteCategory($categoryId: ID!) { 2 | deleteCategory(input: { 3 | scheduleCategoryId: $categoryId 4 | }) 5 | } 6 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/issueTempPassword.graphql: -------------------------------------------------------------------------------- 1 | mutation issueTempPassword($email: String!) { 2 | issueTempPassword(input: { 3 | email: $email 4 | }) 5 | } 6 | 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/scheduleList.graphql: -------------------------------------------------------------------------------- 1 | query ScheduleList($date: Timestamp!, $id: ID) { 2 | schedules(date: $date, userId: $id) { 3 | paginationInfo { 4 | hasNext 5 | } 6 | schedules { 7 | id 8 | name 9 | status 10 | category { 11 | color 12 | } 13 | dateTimeStart 14 | dateTimeEnd 15 | stickerCount 16 | stickerNames 17 | repeatType 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/sendAuthKey.graphql: -------------------------------------------------------------------------------- 1 | query sendAuthKey($email: String!) { 2 | sendAuthKey(email: $email) 3 | } 4 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Query/vaildAuthKey.graphql: -------------------------------------------------------------------------------- 1 | query vaildAuthKey($authKey: String!, $email: String!) { 2 | validAuthKey(validAuthKeyInput: { 3 | authKey: $authKey, 4 | email: $email 5 | }) 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/RefreshTokenInterceptor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RefreshTokenInterceptor.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/24. 6 | // 7 | 8 | import Apollo 9 | import RxSwift 10 | 11 | class RefreshTokenInterceptor: ApolloInterceptor { 12 | 13 | func interceptAsync(chain: RequestChain, request: HTTPRequest, response: HTTPResponse?, completion: @escaping (Result, Error>) -> Void) where Operation: GraphQLOperation { 14 | if let response = response { 15 | 16 | if let error = response.parsedResponse?.errors?.first, 17 | error.description == NetworkError.expiredToken.errorDescription { 18 | TokenManager.shared.isExpired = true 19 | TokenManager.shared.reissue { result in 20 | switch result { 21 | case .success: 22 | chain.retry(request: request, completion: completion) 23 | case .failure(let error): 24 | chain.handleErrorAsync(error, request: request, response: response, completion: completion) 25 | } 26 | } 27 | } else { 28 | chain.proceedAsync(request: request, 29 | response: response, 30 | completion: completion) 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/RequestLoggingInterceptor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RequestLoggingInterceptor.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/29. 6 | // 7 | 8 | import Apollo 9 | import OSLog 10 | 11 | class RequestLoggingInterceptor: ApolloInterceptor { 12 | 13 | func interceptAsync( 14 | chain: RequestChain, 15 | request: HTTPRequest, 16 | response: HTTPResponse?, 17 | completion: @escaping (Result, Error>) -> Void) { 18 | 19 | let logger = Logger() 20 | logger.log(level: .debug, "Outgoing request: \(String(describing: request))") 21 | 22 | chain.proceedAsync(request: request, 23 | response: response, 24 | completion: completion) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Weekand/Weekand/Networking/Timestamp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Timestamp.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/20. 6 | // 7 | 8 | import Foundation 9 | import Apollo 10 | 11 | public typealias Timestamp = Int64 12 | 13 | extension Timestamp: JSONDecodable, JSONEncodable { 14 | 15 | public var jsonValue: JSONValue { 16 | return Int64(self) 17 | } 18 | 19 | public init(jsonValue value: JSONValue) throws { 20 | 21 | guard let timestamp = value as? Int64 else { 22 | throw JSONDecodingError.couldNotConvert(value: value, to: Date.self) 23 | } 24 | 25 | self = Int64(timestamp) 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/Coordinator/Coordinator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Coordinator.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/05/31. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | 11 | protocol Coordinator { 12 | var childCoordinators: [Coordinator] { get set } 13 | var navigationController: UINavigationController { get set } 14 | var type: CoordinatorType { get } 15 | 16 | func start() 17 | } 18 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/Coordinator/CoordinatorDidFinishDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CoordinatorDidFinishDelegate.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/06/21. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol CoordinatorDidFinishDelegate: AnyObject { 11 | func childDidFinish(_ child: Coordinator) 12 | } 13 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/Coordinator/CoordinatorType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CoordinatorType.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/06/03. 6 | // 7 | 8 | import Foundation 9 | 10 | enum CoordinatorType { 11 | // Common 12 | case app 13 | case simplePopup 14 | case warningPopup 15 | case alertPopup 16 | 17 | // Sign Scene 18 | case welcome 19 | case signIn 20 | case signUp 21 | case passwordFind 22 | 23 | // Main Scene 24 | case main 25 | case category 26 | case categoryAdd 27 | case categoryModify 28 | case scheduleAdd 29 | case scheduleModify 30 | case scheduleDetail 31 | case userSearch 32 | case profile 33 | } 34 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/View/WArrowButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WArrowButton.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/04. 6 | // 7 | 8 | import UIKit 9 | 10 | class WArrowButton: UIButton { 11 | 12 | override init(frame: CGRect) { 13 | super.init(frame: frame) 14 | setUpView() 15 | } 16 | 17 | required init?(coder aDecoder: NSCoder) { 18 | super.init(coder: aDecoder) 19 | setUpView() 20 | } 21 | 22 | func setUpView() { 23 | backgroundColor?.withAlphaComponent(0) 24 | let buttonImage = UIImage(named: "arrow.down")?.withTintColor(.gray700) 25 | setImage(buttonImage, for: .normal) 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/View/WCheckBox.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WCheckBox.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/05/25. 6 | // 7 | 8 | import UIKit 9 | 10 | class WCheckBox: UIButton { 11 | 12 | let checkedImage = UIImage(named: "checkmark.fill")!.withTintColor(.mainColor) 13 | let uncheckedImage = UIImage(named: "checkmark.fill")!.withTintColor(.gray300) 14 | 15 | var isChecked: Bool = false { 16 | didSet { 17 | if isChecked == true { 18 | self.setImage(checkedImage, for: .normal) 19 | } else { 20 | self.setImage(uncheckedImage, for: .normal) 21 | } 22 | } 23 | } 24 | 25 | override init(frame: CGRect) { 26 | super.init(frame: frame) 27 | 28 | } 29 | 30 | required init?(coder aDecoder: NSCoder) { 31 | super.init(coder: aDecoder) 32 | 33 | } 34 | 35 | init(isChecked: Bool) { 36 | super.init(frame: CGRect.zero) 37 | 38 | setUpView(isChecked: isChecked) 39 | } 40 | 41 | convenience init() { 42 | self.init(isChecked: false) 43 | } 44 | 45 | private func setUpView(isChecked: Bool) { 46 | self.isChecked = isChecked 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/View/WMultiLineTextLabel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WMultiLineTextLabel.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/25. 6 | // 7 | 8 | import UIKit 9 | 10 | class WMultiLineTextLabel: UILabel { 11 | 12 | override init(frame: CGRect) { 13 | super.init(frame: frame) 14 | setupView() 15 | } 16 | 17 | required init?(coder aDecoder: NSCoder) { 18 | super.init(coder: aDecoder) 19 | setupView() 20 | } 21 | 22 | func setupView() { 23 | font = WFont.body1() 24 | numberOfLines = 0 25 | } 26 | 27 | func setText(string: String) { 28 | let paragraphStyle = NSMutableParagraphStyle() 29 | paragraphStyle.lineHeightMultiple = 1.33 30 | let attrString = NSMutableAttributedString(string: string, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle]) 31 | attributedText = attrString 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/View/WSquareImageView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WSquareImageView.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/05/31. 6 | // 7 | 8 | import UIKit 9 | import SnapKit 10 | 11 | class WSquareImageView: UIImageView { 12 | 13 | override init(frame: CGRect) { 14 | super.init(frame: frame) 15 | setupView() 16 | } 17 | 18 | required init?(coder aDecoder: NSCoder) { 19 | super.init(coder: aDecoder) 20 | setupView() 21 | } 22 | 23 | 24 | init() { 25 | super.init(frame: CGRect.zero) 26 | setupView() 27 | } 28 | 29 | 30 | private func setupView() { 31 | 32 | self.snp.makeConstraints { make in 33 | make.width.equalTo(self.snp.height) 34 | } 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/View/WTextButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WTextButton.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/05/25. 6 | // 7 | 8 | import UIKit 9 | 10 | class WTextButton: UIButton { 11 | 12 | override init(frame: CGRect) { 13 | super.init(frame: frame) 14 | 15 | } 16 | 17 | required init?(coder aDecoder: NSCoder) { 18 | super.init(coder: aDecoder) 19 | 20 | } 21 | 22 | init(title: String) { 23 | super.init(frame: CGRect.zero) 24 | 25 | let titleString = NSAttributedString(string: title, attributes: [NSAttributedString.Key.foregroundColor: UIColor.darkGray!, NSAttributedString.Key.font: WFont.body2()]) 26 | self.setAttributedTitle(titleString, for: .normal) 27 | } 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/View/WTextFieldStackView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WTextFieldStackView.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/06/11. 6 | // 7 | 8 | import UIKit 9 | 10 | class WTextFieldStackView: UIStackView { 11 | 12 | lazy var namelabel = WTextLabel().then { 13 | $0.textColor = UIColor.gray800 14 | } 15 | 16 | let textField = WTextField() 17 | 18 | override init(frame: CGRect) { 19 | super.init(frame: frame) 20 | setupView() 21 | } 22 | 23 | required init(coder: NSCoder) { 24 | super.init(coder: coder) 25 | setupView() 26 | } 27 | 28 | private func setupView() { 29 | self.axis = .vertical 30 | self.distribution = .fill 31 | self.alignment = .fill 32 | self.spacing = 10 33 | 34 | [namelabel, textField].forEach { self.addArrangedSubview($0) } 35 | } 36 | 37 | init(fieldPlaceholder: String, nameText: String) { 38 | super.init(frame: CGRect.zero) 39 | 40 | self.namelabel.text = nameText 41 | self.textField.attributedPlaceholder = NSAttributedString(string: fieldPlaceholder, attributes: [NSAttributedString.Key.foregroundColor: UIColor.darkGray!]) 42 | setupView() 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/View/WTextLabel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WTextLabel.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/05/24. 6 | // 7 | 8 | import UIKit 9 | 10 | class WTextLabel: UILabel { 11 | 12 | override init(frame: CGRect) { 13 | super.init(frame: frame) 14 | setupView() 15 | } 16 | 17 | required init?(coder aDecoder: NSCoder) { 18 | super.init(coder: aDecoder) 19 | setupView() 20 | } 21 | 22 | func setupView() { 23 | font = WFont.body2() 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/View/WTextView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WTextView.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/05. 6 | // 7 | 8 | import UIKit 9 | 10 | class WTextView: UITextView { 11 | 12 | var placeHolder = "" 13 | 14 | override init(frame: CGRect, textContainer: NSTextContainer?) { 15 | super.init(frame: frame, textContainer: textContainer) 16 | setupView() 17 | } 18 | 19 | required init?(coder aDecoder: NSCoder) { 20 | super.init(coder: aDecoder) 21 | setupView() 22 | } 23 | 24 | private func setupView() { 25 | // Scroll 26 | self.isScrollEnabled = false 27 | 28 | // Shape 29 | self.layer.cornerRadius = defaultCornerRadius 30 | self.backgroundColor = .gray200 31 | 32 | // Main Text 33 | self.font = WFont.body1() 34 | self.textColor = .gray900 35 | self.textContainerInset = UIEdgeInsets(top: 14, left: 14, bottom: 14, right: 14) 36 | } 37 | 38 | func setPlaceHolder(_ text: String) { 39 | placeHolder = text 40 | self.text = text 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/View/WTitleLabel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WTitleLabel.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/05/24. 6 | // 7 | 8 | import UIKit 9 | 10 | class WTitleLabel: UILabel { 11 | 12 | override init(frame: CGRect) { 13 | super.init(frame: frame) 14 | setupView() 15 | } 16 | 17 | required init?(coder aDecoder: NSCoder) { 18 | super.init(coder: aDecoder) 19 | setupView() 20 | } 21 | 22 | func setupView() { 23 | font = WFont.title() 24 | numberOfLines = 0 25 | } 26 | 27 | func setText(string: String) { 28 | let paragraphStyle = NSMutableParagraphStyle() 29 | paragraphStyle.lineHeightMultiple = 1.25 30 | let attrString = NSMutableAttributedString(string: string, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle]) 31 | attributedText = attrString 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/View/WToastLabel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WToastMessage.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/08. 6 | // 7 | 8 | import UIKit 9 | 10 | class WToastLabel: UILabel { 11 | 12 | override init(frame: CGRect) { 13 | super.init(frame: frame) 14 | setupView() 15 | } 16 | 17 | required init?(coder aDecoder: NSCoder) { 18 | super.init(coder: aDecoder) 19 | setupView() 20 | } 21 | 22 | func setupView() { 23 | backgroundColor = UIColor.black.withAlphaComponent(0.5) 24 | textColor = UIColor.white 25 | textAlignment = .center 26 | alpha = 1.0 27 | layer.cornerRadius = 10 28 | clipsToBounds = true 29 | } 30 | 31 | func setMessage(text: String, font: UIFont, frame: CGRect) { 32 | self.font = font 33 | self.text = text 34 | self.frame = frame 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/ViewController/BaseNavigationController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseNavigationController.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/06/03. 6 | // 7 | 8 | import UIKit 9 | 10 | class BaseNavigationController: UINavigationController { 11 | 12 | override func viewDidLoad() { 13 | super.viewDidLoad() 14 | 15 | view.backgroundColor = .white 16 | setNavigationBarAppearance() 17 | } 18 | 19 | func setNavigationBarAppearance() { 20 | navigationBar.tintColor = .gray400 21 | navigationItem.backButtonDisplayMode = .minimal 22 | 23 | navigationBar.titleTextAttributes = [ 24 | NSAttributedString.Key.foregroundColor: UIColor.gray700, 25 | NSAttributedString.Key.font: WFont.body1() 26 | ] 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/ViewModel/AlertPopupViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AlertPopupViewModel.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/30. 6 | // 7 | 8 | import Foundation 9 | import RxSwift 10 | 11 | class AlertPopupViewModel: ViewModelType { 12 | 13 | weak var coordinator: AlertPopupCoordinator? 14 | private var disposeBag = DisposeBag() 15 | var completionHandler: () -> Void 16 | 17 | init(coordinator: AlertPopupCoordinator, completionHandler: @escaping () -> Void) { 18 | self.coordinator = coordinator 19 | self.completionHandler = completionHandler 20 | } 21 | 22 | struct Input { 23 | let confirmButtonDidTapEvent: Observable 24 | let cancelButtonDidTapEvent: Observable 25 | } 26 | 27 | struct Output { } 28 | 29 | @discardableResult 30 | func transform(input: Input) -> Output { 31 | 32 | input.confirmButtonDidTapEvent.subscribe(onNext: { 33 | self.completionHandler() 34 | self.coordinator?.dismiss() 35 | }).disposed(by: disposeBag) 36 | 37 | input.cancelButtonDidTapEvent.subscribe(onNext: { 38 | self.coordinator?.dismiss() 39 | }).disposed(by: disposeBag) 40 | 41 | return Output() 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/ViewModel/SimplePopupViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SimplePopupViewModel.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/09. 6 | // 7 | 8 | import Foundation 9 | import RxSwift 10 | import RxCocoa 11 | 12 | class SimplePopupViewModel: ViewModelType { 13 | 14 | weak var coordinator: SimplePopupCoordinator? 15 | private var disposeBag = DisposeBag() 16 | 17 | init(coordinator: SimplePopupCoordinator) { 18 | self.coordinator = coordinator 19 | } 20 | 21 | struct Input { 22 | let confirmButtonDidTapEvent: Observable 23 | } 24 | 25 | struct Output { } 26 | 27 | @discardableResult 28 | func transform(input: Input) -> Output { 29 | 30 | input.confirmButtonDidTapEvent.subscribe(onNext: { 31 | self.coordinator?.dismiss() 32 | }).disposed(by: disposeBag) 33 | 34 | return Output() 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Common/ViewModel/ViewModelType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewModelType.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/06/01. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol ViewModelType { 11 | associatedtype Input 12 | associatedtype Output 13 | 14 | @discardableResult 15 | func transform(input: Input) -> Output 16 | } 17 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/Category/Coordinator/CategoryEditCoordinatorType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CategoryEditCoordinatorType.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/15. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol CategoryEditCoordinatorType: AnyObject, Coordinator { } 11 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/Category/View/CategoryDataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CategoryDataSource.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/29. 6 | // 7 | 8 | import UIKit 9 | 10 | class CategoryDataSource: UITableViewDiffableDataSource { 11 | override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 12 | return true 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/Category/View/ScheduleDataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleSummaryDataSource.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/29. 6 | // 7 | 8 | import UIKit 9 | 10 | class ScheduleSummaryDataSource: UITableViewDiffableDataSource { 11 | override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 12 | return true 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/Category/View/SubView/ColorStackView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ColorStackView.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/06/11. 6 | // 7 | 8 | import UIKit 9 | 10 | class ColorStackView: UIStackView { 11 | 12 | lazy var namelabel = WTextLabel().then { 13 | $0.textColor = UIColor.gray800 14 | } 15 | 16 | lazy var colorView = UIButton().then { 17 | $0.layer.cornerRadius = 5 18 | } 19 | 20 | override init(frame: CGRect) { 21 | super.init(frame: frame) 22 | setupView() 23 | } 24 | 25 | required init(coder: NSCoder) { 26 | super.init(coder: coder) 27 | setupView() 28 | } 29 | 30 | private func setupView() { 31 | self.axis = .vertical 32 | self.distribution = .fill 33 | self.alignment = .leading 34 | self.spacing = 10 35 | 36 | [namelabel, colorView].forEach { self.addArrangedSubview($0) } 37 | 38 | colorView.snp.makeConstraints { make in 39 | make.width.height.equalTo(UIScreen.main.bounds.width * 0.09) 40 | } 41 | } 42 | 43 | init(nameText: String) { 44 | super.init(frame: CGRect.zero) 45 | 46 | self.namelabel.text = nameText 47 | setupView() 48 | } 49 | 50 | func setColor(_ color: UIColor) { 51 | colorView.backgroundColor = color 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/Category/View/SubView/DateTimeLabel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DateLabel.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/26. 6 | // 7 | 8 | import UIKit 9 | 10 | class DateTimeLabel: WIconLabel { 11 | 12 | enum DateTime { 13 | case date 14 | case time 15 | } 16 | 17 | override init(frame: CGRect) { 18 | super.init(frame: frame) 19 | setupView() 20 | } 21 | 22 | required init?(coder aDecoder: NSCoder) { 23 | super.init(coder: aDecoder) 24 | setupView() 25 | } 26 | 27 | private func setupView() { 28 | 29 | self.label.font = WFont.body2() 30 | self.label.textColor = .gray400 31 | } 32 | 33 | init(type: DateTime, title: String) { 34 | super.init(frame: CGRect.zero) 35 | 36 | setupView() 37 | configureValue(type: type, title: title) 38 | } 39 | 40 | } 41 | 42 | extension DateTimeLabel { 43 | 44 | public func configureValue(type: DateTime, title: String) { 45 | switch type { 46 | case .date: 47 | self.icon.image = UIImage(named: "calendar")! 48 | case .time: 49 | self.icon.image = UIImage(named: "time")! 50 | } 51 | self.label.text = title 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/Category/ViewModel/CategoryEditViewModelType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CategoryEditViewModel.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/06/22. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol CategoryEditViewModelType: AnyObject, ViewModelType { } 11 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/Category/ViewModel/ColorSheetViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ColorBottomSheetViewModel.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/06/25. 6 | // 7 | 8 | import Foundation 9 | import RxSwift 10 | import RxCocoa 11 | 12 | class ColorSheetViewModel: ViewModelType { 13 | 14 | weak var coordinator: CategoryEditCoordinatorType? 15 | private var disposeBag = DisposeBag() 16 | 17 | init(coordinator: CategoryEditCoordinatorType) { 18 | 19 | self.coordinator = coordinator 20 | } 21 | 22 | struct Input { 23 | let didColorCellSelected: Observable 24 | let didTapConfirmButton: Observable 25 | } 26 | 27 | struct Output { } 28 | 29 | @discardableResult 30 | func transform(input: Input) -> Output { 31 | 32 | input.didTapConfirmButton 33 | .withLatestFrom(input.didColorCellSelected) 34 | .subscribe(onNext: { item in 35 | if let coordinator = self.coordinator as? CategoryAddCoordinator { 36 | coordinator.sendColorFromSheet(color: Constants.colors[item.section][item.item]) 37 | } else if let coordinator = self.coordinator as? CategoryModifyCoordinator { 38 | coordinator.sendColorFromSheet(color: Constants.colors[item.section][item.item]) 39 | } 40 | 41 | }).disposed(by: disposeBag) 42 | 43 | return Output() 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/Common/View/SortDropDownCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SortDropDownCell.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/07. 6 | // 7 | 8 | import UIKit 9 | import DropDown 10 | 11 | class SortDropDownCell: DropDownCell { 12 | 13 | override func awakeFromNib() { 14 | super.awakeFromNib() 15 | 16 | optionLabel.textColor = .gray700 17 | optionLabel.font = WFont.body1() 18 | } 19 | 20 | override func setSelected(_ selected: Bool, animated: Bool) { 21 | super.setSelected(selected, animated: animated) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/Common/View/WStatusTimeLabel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WStatusTimeLabel.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/05/30. 6 | // 7 | 8 | import UIKit 9 | 10 | class WStatusTimeLabel: WIconLabel { 11 | 12 | override init(frame: CGRect) { 13 | super.init(frame: frame) 14 | setupView() 15 | } 16 | 17 | required init?(coder aDecoder: NSCoder) { 18 | super.init(coder: aDecoder) 19 | setupView() 20 | } 21 | 22 | private func setupView() { 23 | 24 | self.label.font = WFont.body2() 25 | self.label.textColor = .gray400 26 | self.stack.spacing = 0 27 | 28 | self.icon.snp.makeConstraints { make in 29 | make.height.equalTo(24) 30 | } 31 | } 32 | 33 | init(status: StatusIcon, title: String) { 34 | super.init(frame: CGRect.zero) 35 | 36 | setupView() 37 | configureValue(status: status, title: title) 38 | } 39 | 40 | } 41 | 42 | extension WStatusTimeLabel { 43 | 44 | public func configureValue(status: StatusIcon, title: String) { 45 | 46 | self.icon.image = UIImage(named: status.rawValue)!.withTintColor(status.tintColor) 47 | self.label.text = title 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/Main/View/MainScheduleDataSource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MainScheduleDataSource.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/08/01. 6 | // 7 | 8 | import UIKit 9 | 10 | class MainScheduleDataSource: UITableViewDiffableDataSource { 11 | override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 12 | return true 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/Main/ViewModel/Sheet/EmojiTableViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmojiTableViewModel.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/07. 6 | // 7 | 8 | 9 | import UIKit 10 | import RxSwift 11 | import RxRelay 12 | 13 | enum EmojiSection { 14 | case main 15 | } 16 | 17 | class EmojiTableViewModel { 18 | 19 | let targetEmoji: Emoji? 20 | 21 | let disposeBag = DisposeBag() 22 | 23 | var tableViewDataSource: UITableViewDiffableDataSource! 24 | var targetEmojiList: [EmojiGiver] 25 | 26 | init(emoji: Emoji?, list: [EmojiGiver]) { 27 | targetEmojiList = list 28 | targetEmoji = emoji 29 | } 30 | 31 | } 32 | 33 | // MARK: Diffable Data Source 34 | extension EmojiTableViewModel { 35 | 36 | func configureTableViewSnapshot(animatingDifferences: Bool = false) { 37 | 38 | var list = targetEmojiList 39 | if let emoji = self.targetEmoji { 40 | list = targetEmojiList.filter { $0.emoji == emoji } 41 | } 42 | 43 | var snapshot = NSDiffableDataSourceSnapshot() 44 | snapshot.appendSections([.main]) 45 | snapshot.appendItems(list, toSection: .main) 46 | self.tableViewDataSource.apply(snapshot, animatingDifferences: animatingDifferences) 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/Main/ViewModel/Sheet/MonthlyCalendarSheetViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MonthlyCalendarSheetViewModel.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/07. 6 | // 7 | 8 | import Foundation 9 | import RxSwift 10 | 11 | class MonthlyCalendarSheetViewModel { 12 | 13 | weak var coordinator: MainCoordinator? 14 | private var disposeBag = DisposeBag() 15 | var selectedDate: Date? 16 | 17 | init(coordinator: MainCoordinator) { 18 | 19 | self.coordinator = coordinator 20 | } 21 | 22 | struct Input { 23 | let didTapConfirmButton: Observable 24 | } 25 | 26 | struct Output { } 27 | 28 | func transform(input: Input) -> Output { 29 | 30 | input.didTapConfirmButton.subscribe(onNext: { _ in 31 | 32 | print("pass") 33 | self.coordinator?.sendDateFromMonthlyCalender(date: self.selectedDate) 34 | 35 | }).disposed(by: disposeBag) 36 | 37 | 38 | return Output() 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/ScheduleDetail/View/Views/ScheduleInformationStackView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleInformationStackView.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/28. 6 | // 7 | 8 | import UIKit 9 | 10 | class ScheduleInformationStackView: UIStackView { 11 | 12 | lazy var titleLabel = WTextLabel().then { 13 | $0.textColor = UIColor.gray400 14 | $0.font = WFont.body2() 15 | } 16 | 17 | lazy var textLabel = WTextLabel().then { 18 | $0.textColor = UIColor.gray900 19 | $0.font = WFont.body1() 20 | $0.numberOfLines = 0 21 | } 22 | 23 | override init(frame: CGRect) { 24 | super.init(frame: frame) 25 | setupView() 26 | } 27 | 28 | required init(coder: NSCoder) { 29 | super.init(coder: coder) 30 | setupView() 31 | } 32 | 33 | private func setupView() { 34 | self.axis = .vertical 35 | self.distribution = .fill 36 | self.alignment = .fill 37 | self.spacing = 10 38 | 39 | [titleLabel, textLabel].forEach { self.addArrangedSubview($0) } 40 | } 41 | 42 | init(title: String) { 43 | super.init(frame: CGRect.zero) 44 | 45 | self.titleLabel.text = title 46 | setupView() 47 | } 48 | 49 | func configure(text: String) { 50 | self.textLabel.text = text 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/ScheduleEdit/Coordinator/ScheduleEditCoordinatorType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleCoordinatorType.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/27. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol ScheduleEditCoordinatorType: AnyObject, Coordinator { } 11 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/ScheduleEdit/View/RepeatSheetViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RepeatSheetViewController.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/19. 6 | // 7 | 8 | import UIKit 9 | 10 | class RepeatSheetViewController: UIViewController { 11 | 12 | let viewController = RepeatTabViewController() 13 | 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | 17 | setUpView() 18 | configureUI() 19 | } 20 | 21 | private func setUpView() { 22 | view.backgroundColor = .white 23 | } 24 | 25 | private func configureUI() { 26 | 27 | self.view.addSubview(viewController.view) 28 | viewController.view.clipsToBounds = true 29 | viewController.view.layer.cornerRadius = 27 30 | viewController.view.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] 31 | 32 | viewController.view.snp.makeConstraints { make in 33 | make.top.equalToSuperview().offset(20) 34 | make.leading.equalToSuperview().offset(24) 35 | make.trailing.equalToSuperview().offset(-24) 36 | make.bottom.equalToSuperview() 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/ScheduleEdit/View/Views/MemoStackView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MemoStackView.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/05. 6 | // 7 | 8 | import UIKit 9 | 10 | class MemoStackView: UIStackView { 11 | 12 | lazy var namelabel = WTextLabel().then { 13 | $0.textColor = UIColor.gray800 14 | } 15 | 16 | let textView = WTextView() 17 | 18 | override init(frame: CGRect) { 19 | super.init(frame: frame) 20 | setupView() 21 | } 22 | 23 | required init(coder: NSCoder) { 24 | super.init(coder: coder) 25 | setupView() 26 | } 27 | 28 | private func setupView() { 29 | self.axis = .vertical 30 | self.distribution = .fill 31 | self.alignment = .fill 32 | self.spacing = 10 33 | 34 | [namelabel, textView].forEach { self.addArrangedSubview($0) } 35 | 36 | textView.snp.makeConstraints { make in 37 | make.leading.trailing.equalToSuperview() 38 | make.height.greaterThanOrEqualTo(150) 39 | } 40 | } 41 | 42 | init(nameText: String) { 43 | super.init(frame: CGRect.zero) 44 | 45 | self.namelabel.text = nameText 46 | setupView() 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/MainScene/ScheduleEdit/ViewModel/ScheduleEditViewModelType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleViewModelType.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/27. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol ScheduleEditViewModelType: AnyObject, ViewModelType { } 11 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/ProfileScene/Profile/Coordinator/ResignWarningPopupCoordinator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WarningPopupCoordinator.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/28. 6 | // 7 | 8 | import UIKit 9 | 10 | class ResignWarningPopupCoordinator: Coordinator { 11 | var navigationController: UINavigationController 12 | weak var finishDelegate: CoordinatorDidFinishDelegate? 13 | var childCoordinators: [Coordinator] = [] 14 | var resignWarningPopupViewController: ResignWarningPopupViewController 15 | var profileUseCase: ProfileUseCase 16 | var type: CoordinatorType = .warningPopup 17 | 18 | required init(useCase: ProfileUseCase) { 19 | self.resignWarningPopupViewController = ResignWarningPopupViewController() 20 | self.navigationController = UINavigationController(rootViewController: resignWarningPopupViewController) 21 | self.navigationController.modalPresentationStyle = .overFullScreen 22 | self.navigationController.modalTransitionStyle = .crossDissolve 23 | self.profileUseCase = useCase 24 | } 25 | 26 | func start() { 27 | self.resignWarningPopupViewController.viewModel = WarningPopupViewModel(coordinator: self, useCase: profileUseCase) 28 | } 29 | 30 | func dismiss() { 31 | self.navigationController.dismiss(animated: true) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/ProfileScene/Profile/View/SubView/ProfileDetailJobInterestView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ProfileDetailJobInterestView.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/22. 6 | // 7 | 8 | import UIKit 9 | 10 | /// 직업 관심사 부분 11 | class ProfileDetailJobInterestView: UIStackView { 12 | 13 | var jobView = ProfileDetailCollectionStackView() 14 | var interestView = ProfileDetailCollectionStackView() 15 | 16 | init () { 17 | super.init(frame: .zero) 18 | 19 | setUpView() 20 | configureUI() 21 | } 22 | 23 | required init(coder: NSCoder) { 24 | fatalError("init(coder:) has not been implemented") 25 | } 26 | 27 | private func setUpView() { 28 | self.axis = .vertical 29 | self.spacing = 0 30 | self.distribution = .fill 31 | 32 | self.isLayoutMarginsRelativeArrangement = true 33 | self.layoutMargins = UIEdgeInsets(top: 8, left: 16, bottom: 8, right: 16) 34 | 35 | self.backgroundColor = .white 36 | self.layer.cornerRadius = 10 37 | } 38 | 39 | private func configureUI() { 40 | [jobView, interestView].forEach { self.addArrangedSubview($0) } 41 | } 42 | 43 | } 44 | 45 | extension ProfileDetailJobInterestView { 46 | 47 | func setData(jobs: [String], interests: [String]) { 48 | jobView.setData(title: "직업", content: jobs) 49 | interestView.setData(title: "관심사", content: interests) 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/SignScene/SignUp/View/SubView/BasePaddingLabel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BasePaddingLabel.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/10. 6 | // 7 | 8 | import UIKit 9 | 10 | 11 | class BasePaddingLabel: UILabel { 12 | private var padding = UIEdgeInsets(top: 8, left: 14, bottom: 8, right: 14) 13 | 14 | convenience init(padding: UIEdgeInsets) { 15 | self.init() 16 | self.padding = padding 17 | } 18 | 19 | override func drawText(in rect: CGRect) { 20 | super.drawText(in: rect.inset(by: padding)) 21 | } 22 | 23 | override var intrinsicContentSize: CGSize { 24 | var contentSize = super.intrinsicContentSize 25 | contentSize.height += padding.top + padding.bottom 26 | contentSize.width += padding.left + padding.right 27 | 28 | return contentSize 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/SignScene/Welcome/ViewModel/WelcomeViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WelcomeViewModel.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/06/01. 6 | // 7 | 8 | import Foundation 9 | import RxSwift 10 | 11 | class WelcomeViewModel: ViewModelType { 12 | weak var coordinator: WelcomeCoordinator? 13 | private let disposeBag = DisposeBag() 14 | 15 | init(coordinator: WelcomeCoordinator?) { 16 | self.coordinator = coordinator 17 | } 18 | 19 | struct Input { 20 | let didTapSignInButton: Observable 21 | let didTapSignUpButton: Observable 22 | } 23 | 24 | struct Output { } 25 | 26 | @discardableResult 27 | func transform(input: Input) -> Output { 28 | let output = Output() 29 | 30 | input.didTapSignInButton 31 | .subscribe(onNext: { [weak self] _ in 32 | self?.coordinator?.showSignInScene() 33 | }) 34 | .disposed(by: disposeBag) 35 | 36 | input.didTapSignUpButton 37 | .subscribe(onNext: { [weak self] _ in 38 | self?.coordinator?.showSignUpScene() 39 | }) 40 | .disposed(by: disposeBag) 41 | 42 | return output 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/APIModelExtensions/RepeatType+extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RepeatType+extension.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/21. 6 | // 7 | 8 | import Foundation 9 | 10 | extension RepeatType { 11 | func toEntity() -> ScheduleRepeatType { 12 | switch self { 13 | case .daily: 14 | return ScheduleRepeatType.daily 15 | case .weekly: 16 | return ScheduleRepeatType.weekly 17 | case .monthly: 18 | return ScheduleRepeatType.monthly 19 | case .yearly: 20 | return ScheduleRepeatType.yearly 21 | case .once: 22 | return ScheduleRepeatType.once 23 | case .__unknown(let rawValue): 24 | return ScheduleRepeatType.once 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/APIModelExtensions/ScheduleCategoryOpenType+extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Sche.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/15. 6 | // 7 | 8 | import Foundation 9 | 10 | extension ScheduleCategoryOpenType { 11 | func toEntity() -> CategoryOpenType { 12 | switch self { 13 | case .allOpen: 14 | return CategoryOpenType.allOpen 15 | case .followerOpen: 16 | return CategoryOpenType.followerOpen 17 | case .closed: 18 | return CategoryOpenType.closed 19 | case .__unknown(_): 20 | return CategoryOpenType.closed 21 | } 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/APIModelExtensions/ScheduleStatus+extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ScheduleStatus+extension.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/28. 6 | // 7 | 8 | import Foundation 9 | 10 | extension ScheduleStatus { 11 | func toEntity() -> Status { 12 | switch self { 13 | case .completed: 14 | return Status.completed 15 | case .incompleted: 16 | return Status.incompleted 17 | case .skip: 18 | return Status.incompleted 19 | case .undetermined: 20 | return Status.undetermined 21 | case .notYet: 22 | return Status.upcoming 23 | case .__unknown(let rawValue): 24 | return Status.completed 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/APIModelExtensions/Week+extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Week+extension.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/28. 6 | // 7 | 8 | import Foundation 9 | 10 | extension Week { 11 | func toEntity() -> ScheduleWeek { 12 | switch self { 13 | case .monday: 14 | return ScheduleWeek.monday 15 | case .tuesday: 16 | return ScheduleWeek.tuesday 17 | case .wednesday: 18 | return ScheduleWeek.wednesday 19 | case .thursday: 20 | return ScheduleWeek.thursday 21 | case .friday: 22 | return ScheduleWeek.friday 23 | case .saturday: 24 | return ScheduleWeek.saturday 25 | case .sunday: 26 | return ScheduleWeek.sunday 27 | case .__unknown(let rawValue): 28 | return ScheduleWeek.monday 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/DesignSystem/ColorSet.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Color.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/05/20. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UIColor { 11 | // MARK: Custom System Colors 12 | static let mainColor = UIColor(hex: "#5086FF") ?? .systemBlue 13 | static let subColor = UIColor(hex: "#EAF0FF") 14 | static let backgroundColor = UIColor.white 15 | 16 | static let accentColor = UIColor(hex: "#17191C") 17 | static let lightGray = UIColor(hex: "#ECEFF2") 18 | static let darkGray = UIColor(hex: "#AAAEB6") 19 | 20 | static let gray900 = UIColor(hex: "#17191C") ?? .black 21 | static let gray800 = UIColor(hex: "#32353A") ?? .black 22 | static let gray700 = UIColor(hex: "#515459") ?? .black 23 | static let gray600 = UIColor(hex: "#747880") ?? .systemGray6 24 | static let gray500 = UIColor(hex: "#8B929C") ?? .systemGray6 25 | static let gray400 = UIColor(hex: "#AAAEB6") ?? .systemGray 26 | 27 | static let gray300 = UIColor(hex: "#C9CED5") ?? .systemGray 28 | static let gray200 = UIColor(hex: "#ECEFF2") ?? .systemGray 29 | static let gray100 = UIColor(hex: "#F5F7F8") ?? .systemGray 30 | static let wred = UIColor(hex: "#FF7562") ?? .systemRed 31 | static let wblue = UIColor(hex: "#5086FF") ?? .systemBlue 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/DesignSystem/CommonShape.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CommonShape.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/05/23. 6 | // 7 | 8 | import UIKit 9 | 10 | // View Spec 11 | let defaultFontSize: CGFloat = 13.5 12 | let defaultCornerRadius: CGFloat = 12 13 | 14 | // Constraint Spec 15 | let defaultSpacing: CGFloat = 30 16 | let defaultWidthDivider: CGFloat = 1.2 17 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/DesignSystem/EmptySceneType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptySceneType.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/26. 6 | // 7 | 8 | import Foundation 9 | 10 | enum EmptySceneType { 11 | case schedule 12 | case followerSchedule 13 | case search 14 | case follower 15 | case following 16 | case alarm 17 | 18 | var imageName: String { 19 | switch self { 20 | case .schedule: 21 | return "scheduleEmoji.empty" 22 | case .followerSchedule: 23 | return "scheduleEmoji.empty" 24 | case .search: 25 | return "searchEmoji.empty" 26 | case .follower: 27 | return "followersEmoji.empty" 28 | case .following: 29 | return "followingEmoji.empty" 30 | case .alarm: 31 | return "alarmEmoji.empty" 32 | } 33 | } 34 | 35 | var informText: String { 36 | switch self { 37 | case .schedule: 38 | return "일정을 만들어보세요!" 39 | case .followerSchedule: 40 | return "오늘 친구 일정이 없어요" 41 | case .search: 42 | return "찾으시는 검색 결과가 없어요" 43 | case .follower: 44 | return "나를 팔로우하는 친구가\n여기에 표시됩니다" 45 | case .following: 46 | return "친구를 팔로우해 보세요" 47 | case .alarm: 48 | return "아직 소식이 없어요" 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/Extensions/DateExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Date+timeStamp.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/07/15. 6 | // 7 | 8 | import Foundation 9 | 10 | extension Date { 11 | /// Date 값을 Timestamp로 변환 12 | func toTimestamp() -> Int64 { 13 | return Int64(self.timeIntervalSince1970*1000) 14 | } 15 | 16 | /// Date 값을 "HH:mm" 으로 변환 17 | func getTimeString() -> String { 18 | let dateFormatter = DateFormatter() 19 | dateFormatter.dateFormat = "HH:mm" 20 | 21 | return dateFormatter.string(from: self) 22 | } 23 | 24 | /// Date 타입 두개를 "HH:mm - HH:mm"으로 변환 25 | static func getTimelineString(_ from: Date, _ to: Date) -> String { 26 | return "\(from.getTimeString()) - \(to.getTimeString())" 27 | } 28 | 29 | } 30 | 31 | extension Int64 { 32 | /// Timestamp값을 Date로 변환 33 | func toDate() -> Date { 34 | return Date(timeIntervalSince1970: TimeInterval(self/1000)) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/Extensions/FSCalendar+RxExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FSCalendar+extension.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/07. 6 | // 7 | 8 | import UIKit 9 | import RxSwift 10 | import FSCalendar 11 | import RxCocoa 12 | 13 | extension Reactive where Base: FSCalendar { 14 | var delegate: DelegateProxy { 15 | return RxFSCalendarDelegateProxy.proxy(for: self.base) 16 | } 17 | 18 | var didSelect: Observable { 19 | return delegate.methodInvoked(#selector(FSCalendarDelegate.calendar(_:didSelect:at:))) 20 | .map { parameter in 21 | return parameter[1] as? Date ?? Date() 22 | } 23 | } 24 | } 25 | 26 | class RxFSCalendarDelegateProxy: DelegateProxy, DelegateProxyType, FSCalendarDelegate { 27 | static func registerKnownImplementations() { 28 | self.register { (calendar) -> RxFSCalendarDelegateProxy in 29 | RxFSCalendarDelegateProxy(parentObject: calendar, delegateProxy: self) 30 | } 31 | } 32 | 33 | static func currentDelegate(for object: FSCalendar) -> FSCalendarDelegate? { 34 | return object.delegate 35 | } 36 | 37 | static func setCurrentDelegate(_ delegate: FSCalendarDelegate?, to object: FSCalendar) { 38 | object.delegate = delegate 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/Extensions/NSMutableAttributedString+extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableAttributedString+extension.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/05/25. 6 | // 7 | 8 | import UIKit 9 | 10 | extension NSMutableAttributedString { 11 | 12 | func semiBold(_ value: String, font: UIFont, fontColor: UIColor) -> NSMutableAttributedString { 13 | let attributes: [NSAttributedString.Key: Any] = [ 14 | .font: font, 15 | .foregroundColor: fontColor 16 | ] 17 | 18 | self.append(NSAttributedString(string: value, attributes: attributes)) 19 | return self 20 | } 21 | 22 | func bold(_ value: String, font: UIFont, fontColor: UIColor) -> NSMutableAttributedString { 23 | let attributes: [NSAttributedString.Key: Any] = [ 24 | .font: font, 25 | .foregroundColor: fontColor 26 | ] 27 | 28 | self.append(NSAttributedString(string: value, attributes: attributes)) 29 | return self 30 | } 31 | 32 | @discardableResult 33 | func normal(_ value: String, font: UIFont, fontColor: UIColor) -> NSMutableAttributedString { 34 | let attributes: [NSAttributedString.Key: Any] = [ 35 | .font: font, 36 | .foregroundColor: fontColor 37 | ] 38 | 39 | self.append(NSAttributedString(string: value, attributes: attributes)) 40 | return self 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/Extensions/String+trimWhiteSpace.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String+extension.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/15. 6 | // 7 | 8 | import Foundation 9 | 10 | extension String { 11 | var trimWhiteSpace: String { 12 | return self.trimmingCharacters(in: [" "]) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/Extensions/UIButton+setImageInset.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIButton+setImageInset.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/06/14. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UIButton { 11 | 12 | func setImageInset(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) { 13 | 14 | 15 | if #available(iOS 15.0, *) { 16 | if self.configuration != nil { 17 | self.configuration?.contentInsets = NSDirectionalEdgeInsets(top: top, leading: left, bottom: bottom, trailing: right) 18 | } else { 19 | var configuration = UIButton.Configuration.filled() 20 | configuration.contentInsets = NSDirectionalEdgeInsets(top: top, leading: left, bottom: bottom, trailing: right) 21 | self.configuration = configuration 22 | } 23 | 24 | } else { 25 | self.imageEdgeInsets = UIEdgeInsets(top: top, left: left, bottom: bottom, right: right) 26 | } 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/Extensions/UIColor+hex.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Colors.swift 3 | // Weekand 4 | // 5 | // Created by Daegeon Choi on 2022/05/19. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UIColor { 11 | 12 | // MARK: UIColor with Hex 13 | public convenience init?(hex: String) { 14 | 15 | var safeHex = hex 16 | if hex.count == 7 { 17 | safeHex += "FF" 18 | } 19 | 20 | let r, g, b, a: CGFloat 21 | 22 | if safeHex.hasPrefix("#") { 23 | let start = safeHex.index(safeHex.startIndex, offsetBy: 1) 24 | let hexColor = String(safeHex[start...]) 25 | 26 | if hexColor.count == 8 { 27 | let scanner = Scanner(string: hexColor) 28 | var hexNumber: UInt64 = 0 29 | 30 | if scanner.scanHexInt64(&hexNumber) { 31 | r = CGFloat((hexNumber & 0xff000000) >> 24) / 255 32 | g = CGFloat((hexNumber & 0x00ff0000) >> 16) / 255 33 | b = CGFloat((hexNumber & 0x0000ff00) >> 8) / 255 34 | a = CGFloat(hexNumber & 0x000000ff) / 255 35 | 36 | self.init(red: r, green: g, blue: b, alpha: a) 37 | return 38 | } 39 | } 40 | } 41 | 42 | return nil 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/Extensions/UIScrollView+scrollToTop.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+extension.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/15. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UIScrollView { 11 | func scrollToTop() { 12 | let topOffset = CGPoint(x: 0, y: -contentInset.top) 13 | setContentOffset(topOffset, animated: false) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/Manager/ImageCacheManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageCacheManager.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/08/01. 6 | // 7 | 8 | import UIKit 9 | 10 | class ImageCacheManager { 11 | private let cache = NSCache() 12 | static let shared = ImageCacheManager() 13 | 14 | private init() {} 15 | 16 | func loadCachedData(for key: String) -> UIImage? { 17 | let itemURL = NSString(string: key) 18 | return cache.object(forKey: itemURL) 19 | } 20 | 21 | func setCacheData(of image: UIImage, for key: String) { 22 | let itemURL = NSString(string: key) 23 | cache.setObject(image, forKey: itemURL) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Weekand/Weekand/Presentation/Utils/Manager/WRepeatTextManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WRepeatTextManager.swift 3 | // Weekand 4 | // 5 | // Created by 이호영 on 2022/07/27. 6 | // 7 | 8 | import Foundation 9 | 10 | struct WRepeatTextManager { 11 | 12 | static func combineTimeDate(repeatType: ScheduleRepeatType, repeatSelectedValue: [ScheduleWeek]?, repeatEndDate: Date?) -> String { 13 | var repeatText = "" 14 | 15 | if repeatType == .once { 16 | return repeatText 17 | } 18 | 19 | if let repeatSelectedValue = repeatSelectedValue { 20 | let repeatSelectedValueText = repeatSelectedValue.map { $0.description }.joined(separator: ",") 21 | if let date = repeatEndDate { 22 | let dateString = WDateFormatter.dateFormatter.string(from: date) 23 | repeatText = "\(dateString)까지 \(repeatType.description) \(repeatSelectedValueText)" 24 | } else { 25 | repeatText = "\(repeatType.description) \(repeatSelectedValueText)" 26 | } 27 | } else { 28 | if let date = repeatEndDate { 29 | let dateString = WDateFormatter.dateFormatter.string(from: date) 30 | repeatText = "\(dateString)까지 \(repeatType.description)" 31 | } else { 32 | repeatText = "\(repeatType.description)" 33 | } 34 | } 35 | return repeatText + " 반복" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/120-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/120-1.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/40-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/40-1.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/40-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/40-2.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/58-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/58-1.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/80-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/80-1.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/ContactIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/ContactIcon.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/ContactIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/ContactIcon@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/ContactIcon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/ContactIcon@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ContactIcon.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "ContactIcon@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "ContactIcon@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "logo.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "logo@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "logo@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/logo.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/logo@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/logo@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "iPhone 8.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "iPhone 8@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "iPhone 8@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/iPhone 8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/iPhone 8.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/iPhone 8@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/iPhone 8@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/iPhone 8@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/iPhone 8@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "arrow.down.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "arrow.down2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "arrow.down3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/arrow.down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/arrow.down.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/arrow.down2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/arrow.down2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/arrow.down3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/arrow.down3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "arrow.left.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "arrow.left2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "arrow.left3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/arrow.left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/arrow.left.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/arrow.left2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/arrow.left2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/arrow.left3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/arrow.left3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "arrow.right.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "arrow.right2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "arrow.right3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/arrow.right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/arrow.right.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/arrow.right2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/arrow.right2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/arrow.right3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/arrow.right3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "back1x.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "back2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "back3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/back1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/back1x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/back2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/back2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/back3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/back3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "chevron_down.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "chevron_down@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "chevron_down@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/chevron_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/chevron_down.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/chevron_down@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/chevron_down@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/chevron_down@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/chevron_down@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "chevron_right.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "chevron_right@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "chevron_right@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/chevron_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/chevron_right.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/chevron_right@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/chevron_right@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/chevron_right@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/chevron_right@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "chevron_up.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "chevron_up@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "chevron_up@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/chevron_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/chevron_up.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/chevron_up@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/chevron_up@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/chevron_up@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/chevron_up@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "updateCategory.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "updateCategory2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "updateCategory3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/updateCategory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/updateCategory.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/updateCategory2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/updateCategory2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/updateCategory3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/updateCategory3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "closeTest.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "closeTest2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "closeTest3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/closeTest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/closeTest.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/closeTest2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/closeTest2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/closeTest3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/closeTest3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Vector.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Vector@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Vector@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Vector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Vector.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Vector@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Vector@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Vector@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Vector@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "addCategory1x.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "addCategory2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "addCategory3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/addCategory1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/addCategory1x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/addCategory2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/addCategory2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/addCategory3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/addCategory3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "plus.circle.fill.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "plus.circle.fill2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "plus.circle.fill3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/plus.circle.fill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/plus.circle.fill.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/plus.circle.fill2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/plus.circle.fill2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/plus.circle.fill3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/plus.circle.fill3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "plus.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "plus@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "plus@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/plus.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/plus@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/plus@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/plus@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/plus@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "setting.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "setting@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "setting@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/setting.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/setting@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/setting@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/setting@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/setting@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "emoji_congrats.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "emoji_congrats@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "emoji_congrats@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/emoji_congrats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/emoji_congrats.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/emoji_congrats@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/emoji_congrats@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/emoji_congrats@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/emoji_congrats@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "emoji_cool.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "emoji_cool@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "emoji_cool@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/emoji_cool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/emoji_cool.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/emoji_cool@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/emoji_cool@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/emoji_cool@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/emoji_cool@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "emoji_good.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "emoji_good@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "emoji_good@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/emoji_good.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/emoji_good.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/emoji_good@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/emoji_good@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/emoji_good@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/emoji_good@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "emoji_smile.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "emoji_smile@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "emoji_smile@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/emoji_smile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/emoji_smile.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/emoji_smile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/emoji_smile@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/emoji_smile@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/emoji_smile@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "sticker_button.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "sticker_button@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "sticker_button@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/sticker_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/sticker_button.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/sticker_button@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/sticker_button@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/sticker_button@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/sticker_button@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "alarmEmoji.empty.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "alarmEmoji.empty2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "alarmEmoji.empty3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/alarmEmoji.empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/alarmEmoji.empty.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/alarmEmoji.empty2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/alarmEmoji.empty2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/alarmEmoji.empty3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/alarmEmoji.empty3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "followersEmoji.empty.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "followersEmoji.empty2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "followersEmoji.empty3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/followersEmoji.empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/followersEmoji.empty.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/followersEmoji.empty2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/followersEmoji.empty2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/followersEmoji.empty3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/followersEmoji.empty3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "followingEmoji.empty.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "followingEmoji.empty2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "followingEmoji.empty3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/followingEmoji.empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/followingEmoji.empty.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/followingEmoji.empty2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/followingEmoji.empty2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/followingEmoji.empty3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/followingEmoji.empty3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "emptyEmoji.schedule.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "emptyEmoji.schedule2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "emptyEmoji.schedule3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/emptyEmoji.schedule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/emptyEmoji.schedule.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/emptyEmoji.schedule2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/emptyEmoji.schedule2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/emptyEmoji.schedule3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/emptyEmoji.schedule3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "userEmoji.empty.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "userEmoji.empty2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "userEmoji.empty3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/userEmoji.empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/userEmoji.empty.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/userEmoji.empty2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/userEmoji.empty2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/userEmoji.empty3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/userEmoji.empty3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "alarm.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "alarm@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "alarm@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/alarm.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/alarm@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/alarm@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/alarm@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/alarm@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rectangle.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "rectangle@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "rectangle@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/rectangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/rectangle.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/rectangle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/rectangle@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/rectangle@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/rectangle@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "calendar.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "calendar2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "calendar3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/calendar.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/calendar2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/calendar2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/calendar3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/calendar3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "date_end.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "date_end@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "date_end@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/date_end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/date_end.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/date_end@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/date_end@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/date_end@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/date_end@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "date_start.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "date_start@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "date_start@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/date_start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/date_start.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/date_start@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/date_start@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/date_start@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/date_start@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Frame 1548.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Frame 1548@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Frame 1548@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Frame 1548.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Frame 1548.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Frame 1548@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Frame 1548@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Frame 1548@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Frame 1548@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "search.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "search@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "search@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/search.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/search@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/search@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/search@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/search@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "time.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "time2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "time3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/time.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/time2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/time2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/time3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/time3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "visibility_disabled.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "visibility_disabled@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "visibility_disabled@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/visibility_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/visibility_disabled.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/visibility_disabled@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/visibility_disabled@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/visibility_disabled@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/visibility_disabled@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "visibility.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "visibility@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "visibility@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/visibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/visibility.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/visibility@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/visibility@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/visibility@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/visibility@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "work_completed.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "work_completed@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "work_completed@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/work_completed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/work_completed.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/work_completed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/work_completed@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/work_completed@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/work_completed@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "work_beforecheck.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "work_beforecheck@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "work_beforecheck@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/work_beforecheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/work_beforecheck.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/work_beforecheck@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/work_beforecheck@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/work_beforecheck@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/work_beforecheck@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "work_uncompleted.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "work_uncompleted@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "work_uncompleted@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/work_uncompleted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/work_uncompleted.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/work_uncompleted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/work_uncompleted@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/work_uncompleted@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/work_uncompleted@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "work_ongoing.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "work_ongoing@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "work_ongoing@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/work_ongoing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/work_ongoing.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/work_ongoing@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/work_ongoing@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/work_ongoing@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/work_ongoing@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "work_prearranged.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "work_prearranged@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "work_prearranged@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/work_prearranged.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/work_prearranged.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/work_prearranged@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/work_prearranged@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/work_prearranged@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/work_prearranged@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/CheckBox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/CheckBox.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/CheckBox2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/CheckBox2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/CheckBox3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/CheckBox3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "CheckBox.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "CheckBox2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "CheckBox3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "radio_disabled.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "radio_disabled@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "radio_disabled@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/radio_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/radio_disabled.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/radio_disabled@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/radio_disabled@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/radio_disabled@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/radio_disabled@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "radio_enabled.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "radio_enabled2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "radio_enabled3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/radio_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/radio_enabled.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/radio_enabled2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/radio_enabled2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/radio_enabled3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/radio_enabled3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Bounding box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Bounding box.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Bounding box@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Bounding box@2x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Bounding box@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Bounding box@3x.png -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Bounding box.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Bounding box@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "Bounding box@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Weekand/Weekand/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPhotoLibraryUsageDescription 6 | 프로필 사진을 설정하려면 사진 접근 권한을 허용해주세요 7 | UIAppFonts 8 | 9 | PretendardVariable.ttf 10 | 11 | UIApplicationSceneManifest 12 | 13 | UIApplicationSupportsMultipleScenes 14 | 15 | UISceneConfigurations 16 | 17 | UIWindowSceneSessionRoleApplication 18 | 19 | 20 | UISceneConfigurationName 21 | Default Configuration 22 | UISceneDelegateClassName 23 | $(PRODUCT_MODULE_NAME).SceneDelegate 24 | 25 | 26 | 27 | 28 | 29 | 30 | --------------------------------------------------------------------------------