diff --git a/.amplifyrc b/.amplifyrc deleted file mode 100644 index 4b6e549b..00000000 --- a/.amplifyrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "providers": { - "awscloudformation": { - "AuthRoleName": "ddlient-20190128180322-authRole", - "UnauthRoleArn": "arn:aws:iam::367420475204:role/ddlient-20190128180322-unauthRole", - "AuthRoleArn": "arn:aws:iam::367420475204:role/ddlient-20190128180322-authRole", - "Region": "ap-northeast-2", - "DeploymentBucketName": "ddlient-20190128180322-deployment", - "UnauthRoleName": "ddlient-20190128180322-unauthRole", - "StackName": "ddlient-20190128180322", - "StackId": "arn:aws:cloudformation:ap-northeast-2:367420475204:stack/ddlient-20190128180322/90984030-22db-11e9-8192-0644e4d921a4" - } - } -} \ No newline at end of file diff --git a/.gitignore b/.gitignore index e2f21f42..b605dde0 100644 --- a/.gitignore +++ b/.gitignore @@ -63,4 +63,15 @@ buck-out/ base-url.json # Cocoapod -Pods/ \ No newline at end of file +Pods/ + +#amplify +amplify/\#current-cloud-backend +amplify/.config/local-* +amplify/backend/amplify-meta.json +amplify/backend/awscloudformation +build/ +dist/ +node_modules/ +aws-exports.js +awsconfiguration.json \ No newline at end of file diff --git a/README.md b/README.md index b1d85b10..2edbb847 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ 1. `npm` 혹은 `yarn` 설치 2. `cocoapod` 설치 +3. `aws init` 실행 ### 실행하기 @@ -30,8 +31,9 @@ } ``` -6. `~/wdd-client& npm run dev` -7. 서비스 실행 +6. `~/wdd-client$ amplify push` (AWS Amplify 세팅) +7. `~/wdd-client$ npm run dev` +8. 서비스 실행 - Android 1. 에뮬레이터 혹은 안드로이드 디바이스 연결 diff --git a/amplify/#current-cloud-backend/amplify-meta.json b/amplify/#current-cloud-backend/amplify-meta.json deleted file mode 100644 index 5534607e..00000000 --- a/amplify/#current-cloud-backend/amplify-meta.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "providers": { - "awscloudformation": { - "AuthRoleName": "ddlient-20190128180322-authRole", - "UnauthRoleArn": "arn:aws:iam::367420475204:role/ddlient-20190128180322-unauthRole", - "AuthRoleArn": "arn:aws:iam::367420475204:role/ddlient-20190128180322-authRole", - "Region": "ap-northeast-2", - "DeploymentBucketName": "ddlient-20190128180322-deployment", - "UnauthRoleName": "ddlient-20190128180322-unauthRole", - "StackName": "ddlient-20190128180322", - "StackId": "arn:aws:cloudformation:ap-northeast-2:367420475204:stack/ddlient-20190128180322/90984030-22db-11e9-8192-0644e4d921a4" - } - }, - "auth": { - "cognito460c0a48": { - "service": "Cognito", - "providerPlugin": "awscloudformation", - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/ddlient-20190128180322-deployment/amplify-cfn-templates/auth/cognito460c0a48-cloudformation-template.yml", - "logicalId": "authcognito460c0a48" - }, - "lastPushTimeStamp": "2019-01-28T14:39:51.560Z", - "output": { - "AppClientSecret": "1hjk064ocn2p09li5d979ugu9b8igfpj7hc5rj9te10li91u62o8", - "UserPoolId": "ap-northeast-2_7gSBHlM5o", - "AppClientIDWeb": "3fvh6b2rec72k8cak4v16f3luc", - "AppClientID": "5p6tkf30fhvkscsb4gnuvh17mk", - "IdentityPoolId": "ap-northeast-2:8a333684-da29-4ec9-bd2d-77f38d44b5a2", - "IdentityPoolName": "cognito460c0a48_identitypool_460c0a48", - "UserPoolName": "cognito460c0a48_userpool_460c0a48" - }, - "lastPushDirHash": "62e7JUwSjugnW/clujDBLWKRKMA=" - } - }, - "storage": { - "WddClient": { - "service": "S3", - "providerPlugin": "awscloudformation", - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/ddlient-20190128180322-deployment/amplify-cfn-templates/storage/s3-cloudformation-template.json", - "logicalId": "storageWddClient" - }, - "lastPushTimeStamp": "2019-01-28T14:39:51.567Z", - "output": { - "BucketName": "wdd-client-file", - "Region": "ap-northeast-2" - }, - "lastPushDirHash": "fXMYJ6DsfbliSHYEi8uX+orZ1UU=" - } - } -} \ No newline at end of file diff --git a/amplify/#current-cloud-backend/auth/cognito460c0a48/cognito460c0a48-cloudformation-template.yml b/amplify/#current-cloud-backend/auth/cognito460c0a48/cognito460c0a48-cloudformation-template.yml deleted file mode 100644 index 102158aa..00000000 --- a/amplify/#current-cloud-backend/auth/cognito460c0a48/cognito460c0a48-cloudformation-template.yml +++ /dev/null @@ -1,368 +0,0 @@ -AWSTemplateFormatVersion: 2010-09-09 - -Parameters: - identityPoolName: - Type: String - - allowUnauthenticatedIdentities: - Type: String - - thirdPartyAuth: - Type: String - - lambdaLogPolicy: - Type: String - - openIdLambdaRoleName: - Type: String - - openIdRolePolicy: - Type: String - - openIdLambdaIAMPolicy: - Type: String - - openIdLogPolicy: - Type: String - - userPoolName: - Type: String - - autoVerifiedAttributes: - Type: CommaDelimitedList - - mfaConfiguration: - Type: String - - mfaTypes: - Type: CommaDelimitedList - - roleName: - Type: String - - roleExternalId: - Type: String - - policyName: - Type: String - - smsAuthenticationMessage: - Type: String - - smsVerificationMessage: - Type: String - - emailVerificationSubject: - Type: String - - emailVerificationMessage: - Type: String - - defaultPasswordPolicy: - Type: String - - passwordPolicyMinLength: - Type: Number - - passwordPolicyCharacters: - Type: CommaDelimitedList - - requiredAttributes: - Type: CommaDelimitedList - - userpoolClientName: - Type: String - - userpoolClientGenerateSecret: - Type: String - - userpoolClientRefreshTokenValidity: - Type: Number - - userpoolClientReadAttributes: - Type: CommaDelimitedList - - mfaLambdaRole: - Type: String - - mfaLambdaLogPolicy: - Type: String - - mfaPassRolePolicy: - Type: String - - mfaLambdaIAMPolicy: - Type: String - - userpoolClientLambdaRole: - Type: String - - userpoolClientLogPolicy: - Type: String - - userpoolClientLambdaPolicy: - Type: String - - userpoolClientSetAttributes: - Type: String - - useDefault: - Type: String - - unAuthRoleName: - Type: String - - authRoleName: - Type: String - - unAuthRoleArn: - Type: String - - authRoleArn: - Type: String - - resourceName: - Type: String - - authSelections: - Type: String - -Resources: - # BEGIN SNS ROLE RESOURCE - SNSRole: - # Created to allow the UserPool SMS Config to publish via the Simple Notification Service during MFA Process - Type: AWS::IAM::Role - Properties: - RoleName: !Ref roleName - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: '' - Effect: 'Allow' - Principal: - Service: 'cognito-idp.amazonaws.com' - Action: - - 'sts:AssumeRole' - Condition: - StringEquals: - sts:ExternalId: !Ref roleExternalId - Policies: - - PolicyName: !Ref policyName - PolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: 'Allow' - Action: - - 'sns:Publish' - Resource: '*' - # BEGIN USER POOL RESOURCES - UserPool: - # Created upon user selection - # Depends on SNS Role for Arn if MFA is enabled - Type: AWS::Cognito::UserPool - Properties: - UserPoolName: !Ref userPoolName - Schema: - - Name: email - Required: true - Mutable: true - - AutoVerifiedAttributes: !Ref autoVerifiedAttributes - - EmailVerificationMessage: !Ref emailVerificationMessage - EmailVerificationSubject: !Ref emailVerificationSubject - - Policies: - PasswordPolicy: - MinimumLength: !Ref passwordPolicyMinLength - RequireLowercase: true - RequireNumbers: true - RequireSymbols: true - RequireUppercase: true - MfaConfiguration: !Ref mfaConfiguration - SmsVerificationMessage: !Ref smsVerificationMessage - SmsConfiguration: - SnsCallerArn: !GetAtt SNSRole.Arn - ExternalId: !Ref roleExternalId - - UserPoolClientWeb: - # Created provide application access to user pool - # Depends on UserPool for ID reference - Type: 'AWS::Cognito::UserPoolClient' - Properties: - ClientName: cognito460c0a48_app_clientWeb - - RefreshTokenValidity: !Ref userpoolClientRefreshTokenValidity - UserPoolId: !Ref UserPool - DependsOn: UserPool - UserPoolClient: - # Created provide application access to user pool - # Depends on UserPool for ID reference - Type: 'AWS::Cognito::UserPoolClient' - Properties: - ClientName: !Ref userpoolClientName - - GenerateSecret: !Ref userpoolClientGenerateSecret - RefreshTokenValidity: !Ref userpoolClientRefreshTokenValidity - UserPoolId: !Ref UserPool - DependsOn: UserPool - # BEGIN USER POOL LAMBDA RESOURCES - UserPoolClientRole: - # Created to execute Lambda which gets userpool app client config values - Type: 'AWS::IAM::Role' - Properties: - RoleName: !Ref userpoolClientLambdaRole - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: - - lambda.amazonaws.com - Action: - - 'sts:AssumeRole' - DependsOn: UserPoolClient - UserPoolClientLambda: - # Lambda which gets userpool app client config values - # Depends on UserPool for id - # Depends on UserPoolClientRole for role ARN - Type: 'AWS::Lambda::Function' - Properties: - Code: - ZipFile: !Join - - |+ - - - "const response = require('cfn-response');" - - "const aws = require('aws-sdk');" - - 'const identity = new aws.CognitoIdentityServiceProvider();' - - 'exports.handler = (event, context, callback) => {' - - " if (event.RequestType == 'Delete') { " - - ' response.send(event, context, response.SUCCESS, {})' - - ' }' - - " if (event.RequestType == 'Update' || event.RequestType == 'Create') {" - - ' const params = {' - - ' ClientId: event.ResourceProperties.clientId,' - - ' UserPoolId: event.ResourceProperties.userpoolId' - - ' };' - - ' identity.describeUserPoolClient(params).promise()' - - ' .then((res) => {' - - " response.send(event, context, response.SUCCESS, {'appSecret': res.UserPoolClient.ClientSecret});" - - ' })' - - ' .catch((err) => {' - - ' response.send(event, context, response.FAILURE, {err});' - - ' });' - - ' }' - - '};' - Handler: index.handler - Runtime: nodejs6.10 - Timeout: '300' - Role: !GetAtt - - UserPoolClientRole - - Arn - DependsOn: UserPoolClientRole - UserPoolClientLambdaPolicy: - # Sets userpool policy for the role that executes the Userpool Client Lambda - # Depends on UserPool for Arn - # Marked as depending on UserPoolClientRole for easier to understand CFN sequencing - Type: 'AWS::IAM::Policy' - Properties: - PolicyName: !Ref userpoolClientLambdaPolicy - Roles: - - !Ref userpoolClientLambdaRole - PolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Action: - - 'cognito-idp:DescribeUserPoolClient' - Resource: !GetAtt UserPool.Arn - DependsOn: UserPoolClientLambda - UserPoolClientLogPolicy: - # Sets log policy for the role that executes the Userpool Client Lambda - # Depends on UserPool for Arn - # Marked as depending on UserPoolClientLambdaPolicy for easier to understand CFN sequencing - Type: 'AWS::IAM::Policy' - Properties: - PolicyName: !Ref userpoolClientLogPolicy - Roles: - - !Ref userpoolClientLambdaRole - PolicyDocument: - Version: 2012-10-17 - Statement: - - Effect: Allow - Action: - - 'logs:CreateLogGroup' - - 'logs:CreateLogStream' - - 'logs:PutLogEvents' - Resource: !Sub - - arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:* - - { - region: !Ref 'AWS::Region', - account: !Ref 'AWS::AccountId', - lambda: !Ref UserPoolClientLambda, - } - DependsOn: UserPoolClientLambdaPolicy - UserPoolClientInputs: - # Values passed to Userpool client Lambda - # Depends on UserPool for Id - # Depends on UserPoolClient for Id - # Marked as depending on UserPoolClientLambdaPolicy for easier to understand CFN sequencing - Type: 'Custom::LambdaCallout' - Properties: - ServiceToken: !GetAtt UserPoolClientLambda.Arn - clientId: !Ref UserPoolClient - userpoolId: !Ref UserPool - DependsOn: UserPoolClientLogPolicy - - # BEGIN IDENTITY POOL RESOURCES - - IdentityPool: - # Always created - Type: AWS::Cognito::IdentityPool - Properties: - IdentityPoolName: cognito460c0a48_identitypool_460c0a48 - - CognitoIdentityProviders: - - ClientId: !Ref UserPoolClient - ProviderName: !Sub - - cognito-idp.${region}.amazonaws.com/${client} - - { region: !Ref 'AWS::Region', client: !Ref UserPool } - - ClientId: !Ref UserPoolClientWeb - ProviderName: !Sub - - cognito-idp.${region}.amazonaws.com/${client} - - { region: !Ref 'AWS::Region', client: !Ref UserPool } - - AllowUnauthenticatedIdentities: !Ref allowUnauthenticatedIdentities - - DependsOn: UserPoolClientInputs - - IdentityPoolRoleMap: - # Created to map Auth and Unauth roles to the identity pool - # Depends on Identity Pool for ID ref - Type: AWS::Cognito::IdentityPoolRoleAttachment - Properties: - IdentityPoolId: !Ref IdentityPool - Roles: - unauthenticated: !Ref unAuthRoleArn - authenticated: !Ref authRoleArn - DependsOn: IdentityPool - -Outputs: - IdentityPoolId: - Value: !Ref 'IdentityPool' - Description: Id for the identity pool - IdentityPoolName: - Value: !GetAtt IdentityPool.Name - - UserPoolId: - Value: !Ref 'UserPool' - Description: Id for the user pool - UserPoolName: - Value: !Ref userPoolName - AppClientIDWeb: - Value: !Ref 'UserPoolClientWeb' - Description: The user pool app client id for web - AppClientID: - Value: !Ref 'UserPoolClient' - Description: The user pool app client id - AppClientSecret: - Value: !GetAtt UserPoolClientInputs.appSecret diff --git a/amplify/#current-cloud-backend/auth/cognito460c0a48/parameters.json b/amplify/#current-cloud-backend/auth/cognito460c0a48/parameters.json deleted file mode 100644 index 70cde936..00000000 --- a/amplify/#current-cloud-backend/auth/cognito460c0a48/parameters.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "identityPoolName": "cognito460c0a48_identitypool_460c0a48", - "allowUnauthenticatedIdentities": true, - "thirdPartyAuth": false, - "lambdaLogPolicy": "cognito460c0a48_lambda_log_policy", - "openIdLambdaRoleName": "cognito460c0a48_openid_lambda_role", - "openIdRolePolicy": "cognito460c0a48_openid_pass_role_policy", - "openIdLambdaIAMPolicy": "cognito460c0a48_openid_lambda_iam_policy", - "openIdLogPolicy": "cognito460c0a48_openid_lambda_log_policy", - "userPoolName": "cognito460c0a48_userpool_460c0a48", - "autoVerifiedAttributes": ["email"], - "mfaConfiguration": "OFF", - "mfaTypes": ["SMS Text Message"], - "roleName": "cognito460c0a48_sns-role", - "roleExternalId": "cognito460c0a48_role_external_id", - "policyName": "cognito460c0a48-sns-policy", - "smsAuthenticationMessage": "Your authentication code is {####}", - "smsVerificationMessage": "Your verification code is {####}", - "emailVerificationSubject": "Your verification code", - "emailVerificationMessage": "Your verification code is {####}", - "defaultPasswordPolicy": false, - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": [ - "Requires Lowercase", - "Requires Uppercase", - "Requires Numbers", - "Requires Symbols" - ], - "requiredAttributes": ["email"], - "userpoolClientName": "cognito460c0a48_app_client", - "userpoolClientGenerateSecret": true, - "userpoolClientRefreshTokenValidity": 30, - "userpoolClientReadAttributes": ["email"], - "mfaLambdaRole": "cognito460c0a48_totp_lambda_role", - "mfaLambdaLogPolicy": "cognito460c0a48_totp_lambda_log_policy", - "mfaPassRolePolicy": "cognito460c0a48_totp_pass_role_policy", - "mfaLambdaIAMPolicy": "cognito460c0a48_totp_lambda_iam_policy", - "userpoolClientLambdaRole": "cognito460c0a48_userpoolclient_lambda_role", - "userpoolClientLogPolicy": "cognito460c0a48_userpoolclient_lambda_log_policy", - "userpoolClientLambdaPolicy": "cognito460c0a48_userpoolclient_lambda_iam_policy", - "userpoolClientSetAttributes": false, - "useDefault": "default", - "unAuthRoleName": "ddlient-20190128180322-unauthRole", - "authRoleName": "ddlient-20190128180322-authRole", - "unAuthRoleArn": "arn:aws:iam::367420475204:role/ddlient-20190128180322-unauthRole", - "authRoleArn": "arn:aws:iam::367420475204:role/ddlient-20190128180322-authRole", - "resourceName": "cognito460c0a48", - "authSelections": "identityPoolAndUserPool" -} diff --git a/amplify/#current-cloud-backend/storage/WddClient/parameters.json b/amplify/#current-cloud-backend/storage/WddClient/parameters.json deleted file mode 100644 index dab79326..00000000 --- a/amplify/#current-cloud-backend/storage/WddClient/parameters.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "bucketName": "wdd-client-file", - "authPolicyName": "s3_amplify_1b1c6dfb", - "unauthPolicyName": "s3_amplify_1b1c6dfb", - "authRoleName": "ddlient-20190128180322-authRole", - "unauthRoleName": "ddlient-20190128180322-unauthRole", - "authPermissions": "rw", - "unauthPermissions": "rw" -} \ No newline at end of file diff --git a/amplify/#current-cloud-backend/storage/WddClient/s3-cloudformation-template.json b/amplify/#current-cloud-backend/storage/WddClient/s3-cloudformation-template.json deleted file mode 100644 index d8ef6d5f..00000000 --- a/amplify/#current-cloud-backend/storage/WddClient/s3-cloudformation-template.json +++ /dev/null @@ -1,683 +0,0 @@ -{ - "AWSTemplateFormatVersion": "2010-09-09", - "Description": "S3 resource stack creation using Amplify CLI", - "Parameters": { - "bucketName": { - "Type": "String" - }, - "authPolicyName": { - "Type": "String" - }, - "unauthPolicyName": { - "Type": "String" - }, - "authRoleName": { - "Type": "String" - }, - "unauthRoleName": { - "Type": "String" - }, - "unauthPermissions": { - "Type": "String" - }, - "authPermissions": { - "Type": "String" - } - }, - "Conditions": { - "EnableUnauthReadWrite": { - "Fn::Equals": [ - { - "Ref": "unauthPermissions" - }, - "rw" - ] - }, - "EnableUnauthRead": { - "Fn::Equals": [ - { - "Ref": "unauthPermissions" - }, - "r" - ] - }, - "EnableUnauthWrite": { - "Fn::Equals": [ - { - "Ref": "unauthPermissions" - }, - "w" - ] - }, - "EnableAuthReadWrite": { - "Fn::Equals": [ - { - "Ref": "authPermissions" - }, - "rw" - ] - }, - "EnableAuthRead": { - "Fn::Equals": [ - { - "Ref": "authPermissions" - }, - "r" - ] - }, - "EnableAuthWrite": { - "Fn::Equals": [ - { - "Ref": "authPermissions" - }, - "w" - ] - } - }, - "Resources": { - "S3Bucket": { - "Type": "AWS::S3::Bucket", - "DeletionPolicy": "Retain", - "Properties": { - "BucketName": { - "Ref": "bucketName" - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": ["*"], - "AllowedMethods": ["GET", "HEAD", "PUT", "POST", "DELETE"], - "AllowedOrigins": ["*"], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "Id": "S3CORSRuleId1", - "MaxAge": "3000" - } - ] - } - } - }, - "S3UnauthPolicyRW": { - "Condition": "EnableUnauthReadWrite", - "DependsOn": ["S3Bucket"], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, - "Roles": [ - { - "Ref": "unauthRoleName" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/public/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:PutObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/uploads/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:GetObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:ListBucket"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } - ] - ] - } - ], - "Condition": { - "StringLike": { - "s3:prefix": [ - "public/", - "public/*", - "protected/", - "protected/*" - ] - } - } - } - ] - } - } - }, - "S3UnauthPolicyR": { - "Condition": "EnableUnauthRead", - "DependsOn": ["S3Bucket"], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, - "Roles": [ - { - "Ref": "unauthRoleName" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:ListBucket"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } - ] - ] - } - ], - "Condition": { - "StringLike": { - "s3:prefix": [ - "public/", - "public/*", - "protected/", - "protected/*" - ] - } - } - }, - { - "Effect": "Allow", - "Action": ["s3:GetObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/public/*" - ] - ] - } - ] - } - ] - } - } - }, - "S3UnauthPolicyW": { - "Condition": "EnableUnauthWrite", - "DependsOn": ["S3Bucket"], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, - "Roles": [ - { - "Ref": "unauthRoleName" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:PutObject", "s3:DeleteObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/public/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:PutObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/uploads/*" - ] - ] - } - ] - } - ] - } - } - }, - "S3AuthPolicyRW": { - "Condition": "EnableAuthReadWrite", - "DependsOn": ["S3Bucket"], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, - "Roles": [ - { - "Ref": "authRoleName" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/public/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/${cognito-identity.amazonaws.com:sub}/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/private/${cognito-identity.amazonaws.com:sub}/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:PutObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/uploads/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:GetObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:ListBucket"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } - ] - ] - } - ], - "Condition": { - "StringLike": { - "s3:prefix": [ - "public/", - "public/*", - "protected/", - "protected/*", - "private/${cognito-identity.amazonaws.com:sub}/", - "private/${cognito-identity.amazonaws.com:sub}/*" - ] - } - } - } - ] - } - } - }, - "S3AuthPolicyR": { - "Condition": "EnableAuthRead", - "DependsOn": ["S3Bucket"], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, - "Roles": [ - { - "Ref": "authRoleName" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:ListBucket"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } - ] - ] - } - ], - "Condition": { - "StringLike": { - "s3:prefix": [ - "public/", - "public/*", - "protected/", - "protected/*" - ] - } - } - }, - { - "Effect": "Allow", - "Action": ["s3:GetObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/public/*" - ] - ] - } - ] - } - ] - } - } - }, - "S3AuthPolicyW": { - "Condition": "EnableAuthWrite", - "DependsOn": ["S3Bucket"], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, - "Roles": [ - { - "Ref": "authRoleName" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/public/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/${cognito-identity.amazonaws.com:sub}/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/private/${cognito-identity.amazonaws.com:sub}/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:PutObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/uploads/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:GetObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:ListBucket"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } - ] - ] - } - ], - "Condition": { - "StringLike": { - "s3:prefix": [ - "public/", - "public/*", - "protected/", - "protected/*", - "private/${cognito-identity.amazonaws.com:sub}/", - "private/${cognito-identity.amazonaws.com:sub}/*" - ] - } - } - } - ] - } - } - } - }, - "Outputs": { - "BucketName": { - "Value": { - "Ref": "S3Bucket" - }, - "Description": "Bucket name for the S3 bucket" - }, - "Region": { - "Value": { - "Ref": "AWS::Region" - } - } - } -} diff --git a/amplify/.config/aws-info.json b/amplify/.config/aws-info.json deleted file mode 100644 index df794abf..00000000 --- a/amplify/.config/aws-info.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "configLevel": "project", - "useProfile": true, - "profileName": "woodongdang" -} diff --git a/amplify/.config/project-config.json b/amplify/.config/project-config.json index bb436d62..de571bfb 100644 --- a/amplify/.config/project-config.json +++ b/amplify/.config/project-config.json @@ -1,20 +1,17 @@ { - "projectName": "WddClient", - "projectPath": "/Users/jiwoonwon/Documents/woodongdang/WddClient", - "defaultEditor": "code", - "frontendHandler": { - "javascript": "/Users/jiwoonwon/.nvm/versions/node/v8.9.4/lib/node_modules/@aws-amplify/cli/node_modules/amplify-frontend-javascript" - }, - "javascript": { - "framework": "react-native", - "config": { - "SourceDir": "/src", - "DistributionDir": "/src", - "BuildCommand": "npm run-script build", - "StartCommand": "npm run-script start" - } - }, - "providers": { - "awscloudformation": "/Users/jiwoonwon/.nvm/versions/node/v8.9.4/lib/node_modules/@aws-amplify/cli/node_modules/amplify-provider-awscloudformation" - } -} + "projectName": "wdd-client", + "version": "2.0", + "frontend": "javascript", + "javascript": { + "framework": "react-native", + "config": { + "SourceDir": "/src", + "DistributionDir": "/src", + "BuildCommand": "npm run-script build", + "StartCommand": "npm run-script start" + } + }, + "providers": [ + "awscloudformation" + ] +} \ No newline at end of file diff --git a/amplify/backend/amplify-meta.json b/amplify/backend/amplify-meta.json deleted file mode 100644 index 5534607e..00000000 --- a/amplify/backend/amplify-meta.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "providers": { - "awscloudformation": { - "AuthRoleName": "ddlient-20190128180322-authRole", - "UnauthRoleArn": "arn:aws:iam::367420475204:role/ddlient-20190128180322-unauthRole", - "AuthRoleArn": "arn:aws:iam::367420475204:role/ddlient-20190128180322-authRole", - "Region": "ap-northeast-2", - "DeploymentBucketName": "ddlient-20190128180322-deployment", - "UnauthRoleName": "ddlient-20190128180322-unauthRole", - "StackName": "ddlient-20190128180322", - "StackId": "arn:aws:cloudformation:ap-northeast-2:367420475204:stack/ddlient-20190128180322/90984030-22db-11e9-8192-0644e4d921a4" - } - }, - "auth": { - "cognito460c0a48": { - "service": "Cognito", - "providerPlugin": "awscloudformation", - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/ddlient-20190128180322-deployment/amplify-cfn-templates/auth/cognito460c0a48-cloudformation-template.yml", - "logicalId": "authcognito460c0a48" - }, - "lastPushTimeStamp": "2019-01-28T14:39:51.560Z", - "output": { - "AppClientSecret": "1hjk064ocn2p09li5d979ugu9b8igfpj7hc5rj9te10li91u62o8", - "UserPoolId": "ap-northeast-2_7gSBHlM5o", - "AppClientIDWeb": "3fvh6b2rec72k8cak4v16f3luc", - "AppClientID": "5p6tkf30fhvkscsb4gnuvh17mk", - "IdentityPoolId": "ap-northeast-2:8a333684-da29-4ec9-bd2d-77f38d44b5a2", - "IdentityPoolName": "cognito460c0a48_identitypool_460c0a48", - "UserPoolName": "cognito460c0a48_userpool_460c0a48" - }, - "lastPushDirHash": "62e7JUwSjugnW/clujDBLWKRKMA=" - } - }, - "storage": { - "WddClient": { - "service": "S3", - "providerPlugin": "awscloudformation", - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/ddlient-20190128180322-deployment/amplify-cfn-templates/storage/s3-cloudformation-template.json", - "logicalId": "storageWddClient" - }, - "lastPushTimeStamp": "2019-01-28T14:39:51.567Z", - "output": { - "BucketName": "wdd-client-file", - "Region": "ap-northeast-2" - }, - "lastPushDirHash": "fXMYJ6DsfbliSHYEi8uX+orZ1UU=" - } - } -} \ No newline at end of file diff --git a/amplify/backend/auth/cognito460c0a48/parameters.json b/amplify/backend/auth/cognito460c0a48/parameters.json deleted file mode 100644 index 70cde936..00000000 --- a/amplify/backend/auth/cognito460c0a48/parameters.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "identityPoolName": "cognito460c0a48_identitypool_460c0a48", - "allowUnauthenticatedIdentities": true, - "thirdPartyAuth": false, - "lambdaLogPolicy": "cognito460c0a48_lambda_log_policy", - "openIdLambdaRoleName": "cognito460c0a48_openid_lambda_role", - "openIdRolePolicy": "cognito460c0a48_openid_pass_role_policy", - "openIdLambdaIAMPolicy": "cognito460c0a48_openid_lambda_iam_policy", - "openIdLogPolicy": "cognito460c0a48_openid_lambda_log_policy", - "userPoolName": "cognito460c0a48_userpool_460c0a48", - "autoVerifiedAttributes": ["email"], - "mfaConfiguration": "OFF", - "mfaTypes": ["SMS Text Message"], - "roleName": "cognito460c0a48_sns-role", - "roleExternalId": "cognito460c0a48_role_external_id", - "policyName": "cognito460c0a48-sns-policy", - "smsAuthenticationMessage": "Your authentication code is {####}", - "smsVerificationMessage": "Your verification code is {####}", - "emailVerificationSubject": "Your verification code", - "emailVerificationMessage": "Your verification code is {####}", - "defaultPasswordPolicy": false, - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": [ - "Requires Lowercase", - "Requires Uppercase", - "Requires Numbers", - "Requires Symbols" - ], - "requiredAttributes": ["email"], - "userpoolClientName": "cognito460c0a48_app_client", - "userpoolClientGenerateSecret": true, - "userpoolClientRefreshTokenValidity": 30, - "userpoolClientReadAttributes": ["email"], - "mfaLambdaRole": "cognito460c0a48_totp_lambda_role", - "mfaLambdaLogPolicy": "cognito460c0a48_totp_lambda_log_policy", - "mfaPassRolePolicy": "cognito460c0a48_totp_pass_role_policy", - "mfaLambdaIAMPolicy": "cognito460c0a48_totp_lambda_iam_policy", - "userpoolClientLambdaRole": "cognito460c0a48_userpoolclient_lambda_role", - "userpoolClientLogPolicy": "cognito460c0a48_userpoolclient_lambda_log_policy", - "userpoolClientLambdaPolicy": "cognito460c0a48_userpoolclient_lambda_iam_policy", - "userpoolClientSetAttributes": false, - "useDefault": "default", - "unAuthRoleName": "ddlient-20190128180322-unauthRole", - "authRoleName": "ddlient-20190128180322-authRole", - "unAuthRoleArn": "arn:aws:iam::367420475204:role/ddlient-20190128180322-unauthRole", - "authRoleArn": "arn:aws:iam::367420475204:role/ddlient-20190128180322-authRole", - "resourceName": "cognito460c0a48", - "authSelections": "identityPoolAndUserPool" -} diff --git a/amplify/backend/auth/cognito460c0a48/cognito460c0a48-cloudformation-template.yml b/amplify/backend/auth/cognitoc670f476/cognitoc670f476-cloudformation-template.yml similarity index 54% rename from amplify/backend/auth/cognito460c0a48/cognito460c0a48-cloudformation-template.yml rename to amplify/backend/auth/cognitoc670f476/cognitoc670f476-cloudformation-template.yml index 102158aa..d193fe7f 100644 --- a/amplify/backend/auth/cognito460c0a48/cognito460c0a48-cloudformation-template.yml +++ b/amplify/backend/auth/cognitoc670f476/cognitoc670f476-cloudformation-template.yml @@ -1,177 +1,201 @@ AWSTemplateFormatVersion: 2010-09-09 Parameters: - identityPoolName: + env: Type: String - - allowUnauthenticatedIdentities: + authRoleName: Type: String - - thirdPartyAuth: + unauthRoleName: + Type: String + authRoleArn: + Type: String + unauthRoleArn: Type: String + + identityPoolName: + Type: String + + allowUnauthenticatedIdentities: + Type: String + lambdaLogPolicy: Type: String - + openIdLambdaRoleName: Type: String - + openIdRolePolicy: Type: String - + openIdLambdaIAMPolicy: Type: String - + openIdLogPolicy: Type: String - + userPoolName: Type: String - + autoVerifiedAttributes: Type: CommaDelimitedList - + mfaConfiguration: Type: String - + mfaTypes: Type: CommaDelimitedList - + roleName: Type: String - + roleExternalId: Type: String - + policyName: Type: String - + smsAuthenticationMessage: Type: String - + smsVerificationMessage: Type: String - + emailVerificationSubject: Type: String - + emailVerificationMessage: Type: String - + defaultPasswordPolicy: Type: String - + passwordPolicyMinLength: Type: Number - + passwordPolicyCharacters: Type: CommaDelimitedList - + requiredAttributes: Type: CommaDelimitedList - + userpoolClientName: Type: String - + userpoolClientGenerateSecret: Type: String - + userpoolClientRefreshTokenValidity: Type: Number - + + userpoolClientWriteAttributes: + Type: CommaDelimitedList + userpoolClientReadAttributes: Type: CommaDelimitedList - + mfaLambdaRole: Type: String - + mfaLambdaLogPolicy: Type: String - + mfaPassRolePolicy: Type: String - + mfaLambdaIAMPolicy: Type: String - + userpoolClientLambdaRole: Type: String - + userpoolClientLogPolicy: Type: String - + userpoolClientLambdaPolicy: Type: String - + userpoolClientSetAttributes: Type: String - - useDefault: - Type: String - - unAuthRoleName: - Type: String - - authRoleName: - Type: String - - unAuthRoleArn: - Type: String - - authRoleArn: - Type: String - + resourceName: Type: String - + authSelections: Type: String + + useDefault: + Type: String + + usernameAttributes: + Type: CommaDelimitedList + +Conditions: + ShouldNotCreateEnvResources: !Equals [ !Ref env, NONE ] Resources: + # BEGIN SNS ROLE RESOURCE - SNSRole: - # Created to allow the UserPool SMS Config to publish via the Simple Notification Service during MFA Process + SNSRole: + # Created to allow the UserPool SMS Config to publish via the Simple Notification Service during MFA Process Type: AWS::IAM::Role Properties: - RoleName: !Ref roleName - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Sid: '' - Effect: 'Allow' - Principal: - Service: 'cognito-idp.amazonaws.com' - Action: - - 'sts:AssumeRole' - Condition: + RoleName: !If [ShouldNotCreateEnvResources, !Ref roleName, !Join ['',[!Ref roleName, '-', !Ref env]]] + AssumeRolePolicyDocument: + Version: "2012-10-17" + Statement: + - Sid: "" + Effect: "Allow" + Principal: + Service: "cognito-idp.amazonaws.com" + Action: + - "sts:AssumeRole" + Condition: StringEquals: sts:ExternalId: !Ref roleExternalId - Policies: - - PolicyName: !Ref policyName - PolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: 'Allow' - Action: - - 'sns:Publish' - Resource: '*' + Policies: + - + PolicyName: !Ref policyName + PolicyDocument: + Version: "2012-10-17" + Statement: + - + Effect: "Allow" + Action: + - "sns:Publish" + Resource: "*" # BEGIN USER POOL RESOURCES UserPool: - # Created upon user selection - # Depends on SNS Role for Arn if MFA is enabled + # Created upon user selection + # Depends on SNS Role for Arn if MFA is enabled Type: AWS::Cognito::UserPool + UpdateReplacePolicy: Retain Properties: - UserPoolName: !Ref userPoolName - Schema: - - Name: email + UserPoolName: !If [ShouldNotCreateEnvResources, !Ref userPoolName, !Join ['',[!Ref userPoolName, '-', !Ref env]]] + Schema: + + - + Name: email Required: true Mutable: true - + + - + Name: gender + Required: true + Mutable: true + + - + Name: name + Required: true + Mutable: true + + AutoVerifiedAttributes: !Ref autoVerifiedAttributes - + + EmailVerificationMessage: !Ref emailVerificationMessage EmailVerificationSubject: !Ref emailVerificationSubject - + Policies: PasswordPolicy: MinimumLength: !Ref passwordPolicyMinLength @@ -179,39 +203,42 @@ Resources: RequireNumbers: true RequireSymbols: true RequireUppercase: true + + UsernameAttributes: !Ref usernameAttributes + MfaConfiguration: !Ref mfaConfiguration SmsVerificationMessage: !Ref smsVerificationMessage - SmsConfiguration: + SmsConfiguration: SnsCallerArn: !GetAtt SNSRole.Arn - ExternalId: !Ref roleExternalId - + ExternalId: !Ref roleExternalId + UserPoolClientWeb: - # Created provide application access to user pool - # Depends on UserPool for ID reference - Type: 'AWS::Cognito::UserPoolClient' + # Created provide application access to user pool + # Depends on UserPool for ID reference + Type: "AWS::Cognito::UserPoolClient" Properties: - ClientName: cognito460c0a48_app_clientWeb - + ClientName: cognitoc670f476_app_clientWeb + RefreshTokenValidity: !Ref userpoolClientRefreshTokenValidity UserPoolId: !Ref UserPool DependsOn: UserPool UserPoolClient: - # Created provide application access to user pool - # Depends on UserPool for ID reference - Type: 'AWS::Cognito::UserPoolClient' + # Created provide application access to user pool + # Depends on UserPool for ID reference + Type: "AWS::Cognito::UserPoolClient" Properties: ClientName: !Ref userpoolClientName - + GenerateSecret: !Ref userpoolClientGenerateSecret RefreshTokenValidity: !Ref userpoolClientRefreshTokenValidity UserPoolId: !Ref UserPool DependsOn: UserPool # BEGIN USER POOL LAMBDA RESOURCES UserPoolClientRole: - # Created to execute Lambda which gets userpool app client config values + # Created to execute Lambda which gets userpool app client config values Type: 'AWS::IAM::Role' Properties: - RoleName: !Ref userpoolClientLambdaRole + RoleName: !If [ShouldNotCreateEnvResources, !Ref userpoolClientLambdaRole, !Join ['',[!Ref userpoolClientLambdaRole, '-', !Ref env]]] AssumeRolePolicyDocument: Version: '2012-10-17' Statement: @@ -223,51 +250,51 @@ Resources: - 'sts:AssumeRole' DependsOn: UserPoolClient UserPoolClientLambda: - # Lambda which gets userpool app client config values - # Depends on UserPool for id - # Depends on UserPoolClientRole for role ARN + # Lambda which gets userpool app client config values + # Depends on UserPool for id + # Depends on UserPoolClientRole for role ARN Type: 'AWS::Lambda::Function' Properties: Code: - ZipFile: !Join + ZipFile: !Join - |+ - - - "const response = require('cfn-response');" - - "const aws = require('aws-sdk');" + - - 'const response = require(''cfn-response'');' + - 'const aws = require(''aws-sdk'');' - 'const identity = new aws.CognitoIdentityServiceProvider();' - 'exports.handler = (event, context, callback) => {' - - " if (event.RequestType == 'Delete') { " + - ' if (event.RequestType == ''Delete'') { ' - ' response.send(event, context, response.SUCCESS, {})' - ' }' - - " if (event.RequestType == 'Update' || event.RequestType == 'Create') {" + - ' if (event.RequestType == ''Update'' || event.RequestType == ''Create'') {' - ' const params = {' - ' ClientId: event.ResourceProperties.clientId,' - ' UserPoolId: event.ResourceProperties.userpoolId' - ' };' - ' identity.describeUserPoolClient(params).promise()' - ' .then((res) => {' - - " response.send(event, context, response.SUCCESS, {'appSecret': res.UserPoolClient.ClientSecret});" + - ' response.send(event, context, response.SUCCESS, {''appSecret'': res.UserPoolClient.ClientSecret});' - ' })' - ' .catch((err) => {' - - ' response.send(event, context, response.FAILURE, {err});' + - ' response.send(event, context, response.FAILED, {err});' - ' });' - ' }' - '};' Handler: index.handler - Runtime: nodejs6.10 + Runtime: nodejs8.10 Timeout: '300' - Role: !GetAtt + Role: !GetAtt - UserPoolClientRole - Arn DependsOn: UserPoolClientRole UserPoolClientLambdaPolicy: - # Sets userpool policy for the role that executes the Userpool Client Lambda - # Depends on UserPool for Arn - # Marked as depending on UserPoolClientRole for easier to understand CFN sequencing + # Sets userpool policy for the role that executes the Userpool Client Lambda + # Depends on UserPool for Arn + # Marked as depending on UserPoolClientRole for easier to understand CFN sequencing Type: 'AWS::IAM::Policy' Properties: PolicyName: !Ref userpoolClientLambdaPolicy - Roles: - - !Ref userpoolClientLambdaRole + Roles: + - !If [ShouldNotCreateEnvResources, !Ref userpoolClientLambdaRole, !Join ['',[!Ref userpoolClientLambdaRole, '-', !Ref env]]] PolicyDocument: Version: '2012-10-17' Statement: @@ -277,14 +304,14 @@ Resources: Resource: !GetAtt UserPool.Arn DependsOn: UserPoolClientLambda UserPoolClientLogPolicy: - # Sets log policy for the role that executes the Userpool Client Lambda - # Depends on UserPool for Arn - # Marked as depending on UserPoolClientLambdaPolicy for easier to understand CFN sequencing + # Sets log policy for the role that executes the Userpool Client Lambda + # Depends on UserPool for Arn + # Marked as depending on UserPoolClientLambdaPolicy for easier to understand CFN sequencing Type: 'AWS::IAM::Policy' Properties: PolicyName: !Ref userpoolClientLogPolicy - Roles: - - !Ref userpoolClientLambdaRole + Roles: + - !If [ShouldNotCreateEnvResources, !Ref userpoolClientLambdaRole, !Join ['',[!Ref userpoolClientLambdaRole, '-', !Ref env]]] PolicyDocument: Version: 2012-10-17 Statement: @@ -293,69 +320,79 @@ Resources: - 'logs:CreateLogGroup' - 'logs:CreateLogStream' - 'logs:PutLogEvents' - Resource: !Sub + Resource: !Sub - arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:* - - { - region: !Ref 'AWS::Region', - account: !Ref 'AWS::AccountId', - lambda: !Ref UserPoolClientLambda, - } - DependsOn: UserPoolClientLambdaPolicy + - { region: !Ref "AWS::Region", account: !Ref "AWS::AccountId", lambda: !Ref UserPoolClientLambda} + DependsOn: UserPoolClientLambdaPolicy UserPoolClientInputs: - # Values passed to Userpool client Lambda - # Depends on UserPool for Id - # Depends on UserPoolClient for Id - # Marked as depending on UserPoolClientLambdaPolicy for easier to understand CFN sequencing + # Values passed to Userpool client Lambda + # Depends on UserPool for Id + # Depends on UserPoolClient for Id + # Marked as depending on UserPoolClientLambdaPolicy for easier to understand CFN sequencing Type: 'Custom::LambdaCallout' Properties: ServiceToken: !GetAtt UserPoolClientLambda.Arn clientId: !Ref UserPoolClient userpoolId: !Ref UserPool DependsOn: UserPoolClientLogPolicy + - # BEGIN IDENTITY POOL RESOURCES + + + + + # BEGIN IDENTITY POOL RESOURCES + + IdentityPool: - # Always created + # Always created Type: AWS::Cognito::IdentityPool - Properties: - IdentityPoolName: cognito460c0a48_identitypool_460c0a48 - + Properties: + IdentityPoolName: !If [ShouldNotCreateEnvResources, 'cognitoc670f476_identitypool_c670f476', !Join ['',['cognitoc670f476_identitypool_c670f476', '__', !Ref env]]] + CognitoIdentityProviders: - - ClientId: !Ref UserPoolClient + - ClientId: !Ref UserPoolClient ProviderName: !Sub - cognito-idp.${region}.amazonaws.com/${client} - - { region: !Ref 'AWS::Region', client: !Ref UserPool } - - ClientId: !Ref UserPoolClientWeb + - { region: !Ref "AWS::Region", client: !Ref UserPool} + - ClientId: !Ref UserPoolClientWeb ProviderName: !Sub - cognito-idp.${region}.amazonaws.com/${client} - - { region: !Ref 'AWS::Region', client: !Ref UserPool } - + - { region: !Ref "AWS::Region", client: !Ref UserPool} + AllowUnauthenticatedIdentities: !Ref allowUnauthenticatedIdentities - - DependsOn: UserPoolClientInputs - + + + DependsOn: UserPoolClientInputs + + IdentityPoolRoleMap: - # Created to map Auth and Unauth roles to the identity pool - # Depends on Identity Pool for ID ref + # Created to map Auth and Unauth roles to the identity pool + # Depends on Identity Pool for ID ref Type: AWS::Cognito::IdentityPoolRoleAttachment - Properties: + Properties: IdentityPoolId: !Ref IdentityPool Roles: - unauthenticated: !Ref unAuthRoleArn - authenticated: !Ref authRoleArn + unauthenticated: !Ref unauthRoleArn + authenticated: !Ref authRoleArn DependsOn: IdentityPool + -Outputs: +Outputs : + IdentityPoolId: Value: !Ref 'IdentityPool' - Description: Id for the identity pool + Description: Id for the identity pool IdentityPoolName: - Value: !GetAtt IdentityPool.Name - + Value: !GetAtt IdentityPool.Name + + + + UserPoolId: Value: !Ref 'UserPool' - Description: Id for the user pool + Description: Id for the user pool UserPoolName: Value: !Ref userPoolName AppClientIDWeb: @@ -366,3 +403,10 @@ Outputs: Description: The user pool app client id AppClientSecret: Value: !GetAtt UserPoolClientInputs.appSecret + + + + + + + \ No newline at end of file diff --git a/amplify/backend/auth/cognitoc670f476/parameters.json b/amplify/backend/auth/cognitoc670f476/parameters.json new file mode 100644 index 00000000..8fa228a9 --- /dev/null +++ b/amplify/backend/auth/cognitoc670f476/parameters.json @@ -0,0 +1,78 @@ +{ + "identityPoolName": "cognitoc670f476_identitypool_c670f476", + "allowUnauthenticatedIdentities": true, + "lambdaLogPolicy": "cognitoc670f476_lambda_log_policy", + "openIdLambdaRoleName": "cognitoc670f476_openid_lambda_role", + "openIdRolePolicy": "cognitoc670f476_openid_pass_role_policy", + "openIdLambdaIAMPolicy": "cognitoc670f476_openid_lambda_iam_policy", + "openIdLogPolicy": "cognitoc670f476_openid_lambda_log_policy", + "userPoolName": "cognitoc670f476_userpool_c670f476", + "autoVerifiedAttributes": [ + "email" + ], + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS Text Message" + ], + "roleName": "cognitoc670f476_sns-role", + "roleExternalId": "cognitoc670f476_role_external_id", + "policyName": "cognitoc670f476-sns-policy", + "smsAuthenticationMessage": "Your authentication code is {####}", + "smsVerificationMessage": "Your verification code is {####}", + "emailVerificationSubject": "Your verification code", + "emailVerificationMessage": "Your verification code is {####}", + "defaultPasswordPolicy": false, + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [ + "Requires Lowercase", + "Requires Uppercase", + "Requires Numbers", + "Requires Symbols" + ], + "requiredAttributes": [ + "email", + "gender", + "name" + ], + "userpoolClientName": "cognitoc670f476_app_client", + "userpoolClientGenerateSecret": true, + "userpoolClientRefreshTokenValidity": 30, + "userpoolClientWriteAttributes": [ + "email" + ], + "userpoolClientReadAttributes": [ + "email" + ], + "mfaLambdaRole": "cognitoc670f476_totp_lambda_role", + "mfaLambdaLogPolicy": "cognitoc670f476_totp_lambda_log_policy", + "mfaPassRolePolicy": "cognitoc670f476_totp_pass_role_policy", + "mfaLambdaIAMPolicy": "cognitoc670f476_totp_lambda_iam_policy", + "userpoolClientLambdaRole": "cognitoc670f476_userpoolclient_lambda_role", + "userpoolClientLogPolicy": "cognitoc670f476_userpoolclient_lambda_log_policy", + "userpoolClientLambdaPolicy": "cognitoc670f476_userpoolclient_lambda_iam_policy", + "userpoolClientSetAttributes": false, + "resourceName": "cognitoc670f476", + "authSelections": "identityPoolAndUserPool", + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "authRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "unauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "useDefault": "default", + "usernameAttributes": [ + "email" + ] +} \ No newline at end of file diff --git a/amplify/backend/awscloudformation/nested-cloudformation-stack.yml b/amplify/backend/awscloudformation/nested-cloudformation-stack.yml deleted file mode 100644 index 86e4090d..00000000 --- a/amplify/backend/awscloudformation/nested-cloudformation-stack.yml +++ /dev/null @@ -1,219 +0,0 @@ -{ - "AWSTemplateFormatVersion": "2010-09-09", - "Description": "Root stack for the Amplify AWS CloudFormation provider", - "Parameters": { - "DeploymentBucketName": { - "Description": "Name of the common deployment bucket provided by the parent stack", - "Type": "String", - "Default": "DeploymentBucket" - }, - "AuthRoleName": { - "Type": "String", - "Default": "AuthRoleName" - }, - "UnauthRoleName": { - "Type": "String", - "Default": "UnauthRoleName" - } - }, - "Resources": { - "DeploymentBucket": { - "Type": "AWS::S3::Bucket", - "DeletionPolicy": "Retain", - "Properties": { - "BucketName": { - "Ref": "DeploymentBucketName" - } - } - }, - "AuthRole": { - "Type": "AWS::IAM::Role", - "Properties": { - "RoleName": { - "Ref": "AuthRoleName" - }, - "AssumeRolePolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "", - "Effect": "Allow", - "Principal": { - "Federated": "cognito-identity.amazonaws.com" - }, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "ForAnyValue:StringLike": { - "cognito-identity.amazonaws.com:amr": "authenticated" - } - } - } - ] - } - } - }, - "UnauthRole": { - "Type": "AWS::IAM::Role", - "Properties": { - "RoleName": { - "Ref": "UnauthRoleName" - }, - "AssumeRolePolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "", - "Effect": "Allow", - "Principal": { - "Federated": "cognito-identity.amazonaws.com" - }, - "Action": "sts:AssumeRoleWithWebIdentity", - "Condition": { - "ForAnyValue:StringLike": { - "cognito-identity.amazonaws.com:amr": "unauthenticated" - } - } - } - ] - } - } - }, - "authcognito460c0a48": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/ddlient-20190128180322-deployment/amplify-cfn-templates/auth/cognito460c0a48-cloudformation-template.yml", - "Parameters": { - "identityPoolName": "cognito460c0a48_identitypool_460c0a48", - "allowUnauthenticatedIdentities": true, - "thirdPartyAuth": false, - "lambdaLogPolicy": "cognito460c0a48_lambda_log_policy", - "openIdLambdaRoleName": "cognito460c0a48_openid_lambda_role", - "openIdRolePolicy": "cognito460c0a48_openid_pass_role_policy", - "openIdLambdaIAMPolicy": "cognito460c0a48_openid_lambda_iam_policy", - "openIdLogPolicy": "cognito460c0a48_openid_lambda_log_policy", - "userPoolName": "cognito460c0a48_userpool_460c0a48", - "autoVerifiedAttributes": "email", - "mfaConfiguration": "OFF", - "mfaTypes": "SMS Text Message", - "roleName": "cognito460c0a48_sns-role", - "roleExternalId": "cognito460c0a48_role_external_id", - "policyName": "cognito460c0a48-sns-policy", - "smsAuthenticationMessage": "Your authentication code is {####}", - "smsVerificationMessage": "Your verification code is {####}", - "emailVerificationSubject": "Your verification code", - "emailVerificationMessage": "Your verification code is {####}", - "defaultPasswordPolicy": false, - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": "Requires Lowercase,Requires Uppercase,Requires Numbers,Requires Symbols", - "requiredAttributes": "email", - "userpoolClientName": "cognito460c0a48_app_client", - "userpoolClientGenerateSecret": true, - "userpoolClientRefreshTokenValidity": 30, - "userpoolClientReadAttributes": "email", - "mfaLambdaRole": "cognito460c0a48_totp_lambda_role", - "mfaLambdaLogPolicy": "cognito460c0a48_totp_lambda_log_policy", - "mfaPassRolePolicy": "cognito460c0a48_totp_pass_role_policy", - "mfaLambdaIAMPolicy": "cognito460c0a48_totp_lambda_iam_policy", - "userpoolClientLambdaRole": "cognito460c0a48_userpoolclient_lambda_role", - "userpoolClientLogPolicy": "cognito460c0a48_userpoolclient_lambda_log_policy", - "userpoolClientLambdaPolicy": "cognito460c0a48_userpoolclient_lambda_iam_policy", - "userpoolClientSetAttributes": false, - "useDefault": "default", - "unAuthRoleName": "ddlient-20190128180322-unauthRole", - "authRoleName": "ddlient-20190128180322-authRole", - "unAuthRoleArn": "arn:aws:iam::367420475204:role/ddlient-20190128180322-unauthRole", - "authRoleArn": "arn:aws:iam::367420475204:role/ddlient-20190128180322-authRole", - "resourceName": "cognito460c0a48", - "authSelections": "identityPoolAndUserPool" - } - } - }, - "storageWddClient": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/ddlient-20190128180322-deployment/amplify-cfn-templates/storage/s3-cloudformation-template.json", - "Parameters": { - "bucketName": "wdd-client-file", - "authPolicyName": "s3_amplify_1b1c6dfb", - "unauthPolicyName": "s3_amplify_1b1c6dfb", - "authRoleName": "ddlient-20190128180322-authRole", - "unauthRoleName": "ddlient-20190128180322-unauthRole", - "authPermissions": "rw", - "unauthPermissions": "rw" - } - } - } - }, - "Outputs": { - "Region": { - "Description": "CloudFormation provider root stack Region", - "Value": { - "Ref": "AWS::Region" - }, - "Export": { - "Name": { - "Fn::Sub": "${AWS::StackName}-Region" - } - } - }, - "StackName": { - "Description": "CloudFormation provider root stack ID", - "Value": { - "Ref": "AWS::StackName" - }, - "Export": { - "Name": { - "Fn::Sub": "${AWS::StackName}-StackName" - } - } - }, - "StackId": { - "Description": "CloudFormation provider root stack name", - "Value": { - "Ref": "AWS::StackId" - }, - "Export": { - "Name": { - "Fn::Sub": "${AWS::StackName}-StackId" - } - } - }, - "DeploymentBucketName": { - "Description": "CloudFormation provider root stack deployment bucket name", - "Value": { - "Ref": "DeploymentBucketName" - }, - "Export": { - "Name": { - "Fn::Sub": "${AWS::StackName}-DeploymentBucketName" - } - } - }, - "AuthRoleArn": { - "Value": { - "Fn::GetAtt": [ - "AuthRole", - "Arn" - ] - } - }, - "UnauthRoleArn": { - "Value": { - "Fn::GetAtt": [ - "UnauthRole", - "Arn" - ] - } - }, - "AuthRoleName": { - "Value": { - "Ref": "AuthRole" - } - }, - "UnauthRoleName": { - "Value": { - "Ref": "UnauthRole" - } - } - } -} \ No newline at end of file diff --git a/amplify/backend/backend-config.json b/amplify/backend/backend-config.json new file mode 100644 index 00000000..3fdfe362 --- /dev/null +++ b/amplify/backend/backend-config.json @@ -0,0 +1,14 @@ +{ + "auth": { + "cognitoc670f476": { + "service": "Cognito", + "providerPlugin": "awscloudformation" + } + }, + "storage": { + "WddStorage": { + "service": "S3", + "providerPlugin": "awscloudformation" + } + } +} \ No newline at end of file diff --git a/amplify/backend/storage/WddClient/parameters.json b/amplify/backend/storage/WddClient/parameters.json deleted file mode 100644 index dab79326..00000000 --- a/amplify/backend/storage/WddClient/parameters.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "bucketName": "wdd-client-file", - "authPolicyName": "s3_amplify_1b1c6dfb", - "unauthPolicyName": "s3_amplify_1b1c6dfb", - "authRoleName": "ddlient-20190128180322-authRole", - "unauthRoleName": "ddlient-20190128180322-unauthRole", - "authPermissions": "rw", - "unauthPermissions": "rw" -} \ No newline at end of file diff --git a/amplify/backend/storage/WddClient/s3-cloudformation-template.json b/amplify/backend/storage/WddClient/s3-cloudformation-template.json deleted file mode 100644 index d8ef6d5f..00000000 --- a/amplify/backend/storage/WddClient/s3-cloudformation-template.json +++ /dev/null @@ -1,683 +0,0 @@ -{ - "AWSTemplateFormatVersion": "2010-09-09", - "Description": "S3 resource stack creation using Amplify CLI", - "Parameters": { - "bucketName": { - "Type": "String" - }, - "authPolicyName": { - "Type": "String" - }, - "unauthPolicyName": { - "Type": "String" - }, - "authRoleName": { - "Type": "String" - }, - "unauthRoleName": { - "Type": "String" - }, - "unauthPermissions": { - "Type": "String" - }, - "authPermissions": { - "Type": "String" - } - }, - "Conditions": { - "EnableUnauthReadWrite": { - "Fn::Equals": [ - { - "Ref": "unauthPermissions" - }, - "rw" - ] - }, - "EnableUnauthRead": { - "Fn::Equals": [ - { - "Ref": "unauthPermissions" - }, - "r" - ] - }, - "EnableUnauthWrite": { - "Fn::Equals": [ - { - "Ref": "unauthPermissions" - }, - "w" - ] - }, - "EnableAuthReadWrite": { - "Fn::Equals": [ - { - "Ref": "authPermissions" - }, - "rw" - ] - }, - "EnableAuthRead": { - "Fn::Equals": [ - { - "Ref": "authPermissions" - }, - "r" - ] - }, - "EnableAuthWrite": { - "Fn::Equals": [ - { - "Ref": "authPermissions" - }, - "w" - ] - } - }, - "Resources": { - "S3Bucket": { - "Type": "AWS::S3::Bucket", - "DeletionPolicy": "Retain", - "Properties": { - "BucketName": { - "Ref": "bucketName" - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": ["*"], - "AllowedMethods": ["GET", "HEAD", "PUT", "POST", "DELETE"], - "AllowedOrigins": ["*"], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "Id": "S3CORSRuleId1", - "MaxAge": "3000" - } - ] - } - } - }, - "S3UnauthPolicyRW": { - "Condition": "EnableUnauthReadWrite", - "DependsOn": ["S3Bucket"], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, - "Roles": [ - { - "Ref": "unauthRoleName" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/public/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:PutObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/uploads/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:GetObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:ListBucket"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } - ] - ] - } - ], - "Condition": { - "StringLike": { - "s3:prefix": [ - "public/", - "public/*", - "protected/", - "protected/*" - ] - } - } - } - ] - } - } - }, - "S3UnauthPolicyR": { - "Condition": "EnableUnauthRead", - "DependsOn": ["S3Bucket"], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, - "Roles": [ - { - "Ref": "unauthRoleName" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:ListBucket"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } - ] - ] - } - ], - "Condition": { - "StringLike": { - "s3:prefix": [ - "public/", - "public/*", - "protected/", - "protected/*" - ] - } - } - }, - { - "Effect": "Allow", - "Action": ["s3:GetObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/public/*" - ] - ] - } - ] - } - ] - } - } - }, - "S3UnauthPolicyW": { - "Condition": "EnableUnauthWrite", - "DependsOn": ["S3Bucket"], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, - "Roles": [ - { - "Ref": "unauthRoleName" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:PutObject", "s3:DeleteObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/public/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:PutObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/uploads/*" - ] - ] - } - ] - } - ] - } - } - }, - "S3AuthPolicyRW": { - "Condition": "EnableAuthReadWrite", - "DependsOn": ["S3Bucket"], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, - "Roles": [ - { - "Ref": "authRoleName" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/public/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/${cognito-identity.amazonaws.com:sub}/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/private/${cognito-identity.amazonaws.com:sub}/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:PutObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/uploads/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:GetObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:ListBucket"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } - ] - ] - } - ], - "Condition": { - "StringLike": { - "s3:prefix": [ - "public/", - "public/*", - "protected/", - "protected/*", - "private/${cognito-identity.amazonaws.com:sub}/", - "private/${cognito-identity.amazonaws.com:sub}/*" - ] - } - } - } - ] - } - } - }, - "S3AuthPolicyR": { - "Condition": "EnableAuthRead", - "DependsOn": ["S3Bucket"], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, - "Roles": [ - { - "Ref": "authRoleName" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:ListBucket"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } - ] - ] - } - ], - "Condition": { - "StringLike": { - "s3:prefix": [ - "public/", - "public/*", - "protected/", - "protected/*" - ] - } - } - }, - { - "Effect": "Allow", - "Action": ["s3:GetObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/public/*" - ] - ] - } - ] - } - ] - } - } - }, - "S3AuthPolicyW": { - "Condition": "EnableAuthWrite", - "DependsOn": ["S3Bucket"], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, - "Roles": [ - { - "Ref": "authRoleName" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/public/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/${cognito-identity.amazonaws.com:sub}/*" - ] - ] - }, - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/private/${cognito-identity.amazonaws.com:sub}/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:PutObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/uploads/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:GetObject"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/*" - ] - ] - } - ] - }, - { - "Effect": "Allow", - "Action": ["s3:ListBucket"], - "Resource": [ - { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } - ] - ] - } - ], - "Condition": { - "StringLike": { - "s3:prefix": [ - "public/", - "public/*", - "protected/", - "protected/*", - "private/${cognito-identity.amazonaws.com:sub}/", - "private/${cognito-identity.amazonaws.com:sub}/*" - ] - } - } - } - ] - } - } - } - }, - "Outputs": { - "BucketName": { - "Value": { - "Ref": "S3Bucket" - }, - "Description": "Bucket name for the S3 bucket" - }, - "Region": { - "Value": { - "Ref": "AWS::Region" - } - } - } -} diff --git a/amplify/backend/storage/WddStorage/parameters.json b/amplify/backend/storage/WddStorage/parameters.json new file mode 100644 index 00000000..354e6b60 --- /dev/null +++ b/amplify/backend/storage/WddStorage/parameters.json @@ -0,0 +1,38 @@ +{ + "bucketName": "wdd-storage", + "authPolicyName": "s3_amplify_e2867567", + "unauthPolicyName": "s3_amplify_e2867567", + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "selectedGuestPermissions": [ + "s3:PutObject", + "s3:GetObject", + "s3:ListBucket", + "s3:DeleteObject" + ], + "selectedAuthenticatedPermissions": [ + "s3:PutObject", + "s3:GetObject", + "s3:ListBucket", + "s3:DeleteObject" + ], + "s3PermissionsAuthenticatedPublic": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PublicPolicy": "Public_policy_bcfb74d9", + "s3PermissionsAuthenticatedProtected": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3ProtectedPolicy": "Protected_policy_bcfb74d9", + "s3PermissionsAuthenticatedUploads": "s3:PutObject", + "s3UploadsPolicy": "Uploads_policy_bcfb74d9", + "s3PermissionsAuthenticatedPrivate": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PrivatePolicy": "Private_policy_bcfb74d9", + "AuthenticatedAllowList": "ALLOW", + "s3ReadPolicy": "read_policy_bcfb74d9", + "s3PermissionsGuestPublic": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsGuestProtected": "s3:GetObject", + "s3PermissionsGuestUploads": "s3:PutObject", + "s3PermissionsGuestPrivate": "DISALLOW", + "GuestAllowList": "ALLOW" +} \ No newline at end of file diff --git a/amplify/backend/storage/WddStorage/s3-cloudformation-template.json b/amplify/backend/storage/WddStorage/s3-cloudformation-template.json new file mode 100644 index 00000000..a8da8a16 --- /dev/null +++ b/amplify/backend/storage/WddStorage/s3-cloudformation-template.json @@ -0,0 +1,627 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Description": "S3 resource stack creation using Amplify CLI", + "Parameters": { + "bucketName": { + "Type": "String" + }, + "authPolicyName": { + "Type": "String" + }, + "unauthPolicyName": { + "Type": "String" + }, + "authRoleName": { + "Type": "String" + }, + "unauthRoleName": { + "Type": "String" + }, + "s3PublicPolicy": { + "Type": "String" + }, + "s3PrivatePolicy": { + "Type": "String" + }, + "s3ProtectedPolicy": { + "Type": "String" + }, + "s3UploadsPolicy": { + "Type": "String" + }, + "s3ReadPolicy": { + "Type": "String" + }, + "s3PermissionsAuthenticatedPublic": { + "Type": "String" + }, + "s3PermissionsAuthenticatedProtected": { + "Type": "String" + }, + "s3PermissionsAuthenticatedPrivate": { + "Type": "String" + }, + "s3PermissionsAuthenticatedUploads": { + "Type": "String" + }, + "s3PermissionsGuestPublic": { + "Type": "String" + }, + "s3PermissionsGuestProtected": { + "Type": "String" + }, + "s3PermissionsGuestPrivate": { + "Type": "String" + }, + "s3PermissionsGuestUploads": { + "Type": "String" + }, + "AuthenticatedAllowList": { + "Type": "String" + }, + "GuestAllowList": { + "Type": "String" + }, + "selectedGuestPermissions": { + "Type": "CommaDelimitedList" + }, + "selectedAuthenticatedPermissions": { + "Type": "CommaDelimitedList" + }, + "env": { + "Type": "String" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + }, + "CreateAuthPublic": { + "Fn::Not" : [{ + "Fn::Equals" : [ + {"Ref" : "s3PermissionsAuthenticatedPublic"}, + "DISALLOW" + ] + }] + }, + "CreateAuthProtected": { + "Fn::Not" : [{ + "Fn::Equals" : [ + {"Ref" : "s3PermissionsAuthenticatedProtected"}, + "DISALLOW" + ] + }] + }, + "CreateAuthPrivate": { + "Fn::Not" : [{ + "Fn::Equals" : [ + {"Ref" : "s3PermissionsAuthenticatedPrivate"}, + "DISALLOW" + ] + }] + }, + "CreateAuthUploads": { + "Fn::Not" : [{ + "Fn::Equals" : [ + {"Ref" : "s3PermissionsAuthenticatedUploads"}, + "DISALLOW" + ] + }] + }, + "CreateGuestPublic": { + "Fn::Not" : [{ + "Fn::Equals" : [ + {"Ref" : "s3PermissionsGuestPublic"}, + "DISALLOW" + ] + }] + }, + "CreateGuestUploads": { + "Fn::Not" : [{ + "Fn::Equals" : [ + {"Ref" : "s3PermissionsGuestUploads"}, + "DISALLOW" + ] + }] + }, + "AuthReadAndList": { + "Fn::Not" : [{ + "Fn::Equals" : [ + {"Ref" : "AuthenticatedAllowList"}, + "DISALLOW" + ] + }] + }, + "GuestReadAndList": { + "Fn::Not" : [{ + "Fn::Equals" : [ + {"Ref" : "GuestAllowList"}, + "DISALLOW" + ] + }] + } + }, + "Resources": { + "S3Bucket": { + "Type": "AWS::S3::Bucket", + "DeletionPolicy" : "Retain", + "Properties": { + "BucketName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "bucketName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "bucketName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "Id": "S3CORSRuleId1", + "MaxAge": "3000" + } + ] + } + } + }, + "S3AuthPublicPolicy": { + "DependsOn": [ + "S3Bucket" + ], + "Condition": "CreateAuthPublic", + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": { + "Ref": "s3PublicPolicy" + }, + "Roles": [ + { + "Ref": "authRoleName" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": { + "Fn::Split" : [ "," , { + "Ref": "s3PermissionsAuthenticatedPublic" + } ] + }, + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "S3Bucket" + }, + "/public/*" + ] + ] + } + ] + } + ] + } + } + }, + "S3AuthProtectedPolicy": { + "DependsOn": [ + "S3Bucket" + ], + "Condition": "CreateAuthProtected", + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": { + "Ref": "s3ProtectedPolicy" + }, + "Roles": [ + { + "Ref": "authRoleName" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": { + "Fn::Split" : [ "," , { + "Ref": "s3PermissionsAuthenticatedProtected" + } ] + }, + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "S3Bucket" + }, + "/protected/${cognito-identity.amazonaws.com:sub}/*" + ] + ] + } + ] + } + ] + } + } + }, + "S3AuthPrivatePolicy": { + "DependsOn": [ + "S3Bucket" + ], + "Condition": "CreateAuthPrivate", + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": { + "Ref": "s3PrivatePolicy" + }, + "Roles": [ + { + "Ref": "authRoleName" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": { + "Fn::Split" : [ "," , { + "Ref": "s3PermissionsAuthenticatedPrivate" + } ] + }, + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "S3Bucket" + }, + "/private/${cognito-identity.amazonaws.com:sub}/*" + ] + ] + } + ] + } + ] + } + } + }, + "S3AuthUploadPolicy": { + "DependsOn": [ + "S3Bucket" + ], + "Condition": "CreateAuthUploads", + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": { + "Ref": "s3UploadsPolicy" + }, + "Roles": [ + { + "Ref": "authRoleName" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": { + "Fn::Split" : [ "," , { + "Ref": "s3PermissionsAuthenticatedUploads" + } ] + }, + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "S3Bucket" + }, + "/uploads/*" + ] + ] + } + ] + } + ] + } + } + }, + "S3AuthReadPolicy": { + "DependsOn": [ + "S3Bucket" + ], + "Condition": "AuthReadAndList", + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": { + "Ref": "s3ReadPolicy" + }, + "Roles": [ + { + "Ref": "authRoleName" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "s3:GetObject" + ], + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "S3Bucket" + }, + "/protected/*" + ] + ] + } + ] + }, + { + "Effect": "Allow", + "Action": [ + "s3:ListBucket" + ], + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "S3Bucket" + } + ] + ] + } + ], + "Condition": { + "StringLike": { + "s3:prefix": [ + "public/", + "public/*", + "protected/", + "protected/*", + "private/${cognito-identity.amazonaws.com:sub}/", + "private/${cognito-identity.amazonaws.com:sub}/*" + ] + } + } + } + ] + } + } + }, + "S3GuestPublicPolicy": { + "DependsOn": [ + "S3Bucket" + ], + "Condition": "CreateGuestPublic", + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": { + "Ref": "s3PublicPolicy" + }, + "Roles": [ + { + "Ref": "unauthRoleName" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": { + "Fn::Split" : [ "," , { + "Ref": "s3PermissionsGuestPublic" + } ] + }, + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "S3Bucket" + }, + "/public/*" + ] + ] + } + ] + } + ] + } + } + }, + "S3GuestUploadPolicy": { + "DependsOn": [ + "S3Bucket" + ], + "Condition": "CreateGuestUploads", + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": { + "Ref": "s3UploadsPolicy" + }, + "Roles": [ + { + "Ref": "unauthRoleName" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": { + "Fn::Split" : [ "," , { + "Ref": "s3PermissionsGuestUploads" + } ] + }, + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "S3Bucket" + }, + "/uploads/*" + ] + ] + } + ] + } + ] + } + } + }, + "S3GuestReadPolicy": { + "DependsOn": [ + "S3Bucket" + ], + "Condition": "GuestReadAndList", + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": { + "Ref": "s3ReadPolicy" + }, + "Roles": [ + { + "Ref": "unauthRoleName" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "s3:GetObject" + ], + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "S3Bucket" + }, + "/protected/*" + ] + ] + } + ] + }, + { + "Effect": "Allow", + "Action": [ + "s3:ListBucket" + ], + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "S3Bucket" + } + ] + ] + } + ], + "Condition": { + "StringLike": { + "s3:prefix": [ + "public/", + "public/*", + "protected/", + "protected/*" + ] + } + } + } + ] + } + } + } + }, + "Outputs": { + "BucketName": { + "Value": { + "Ref": "S3Bucket" + }, + "Description": "Bucket name for the S3 bucket" + }, + "Region": { + "Value": { + "Ref": "AWS::Region" + } + } + } +} \ No newline at end of file diff --git a/amplify/team-provider-info.json b/amplify/team-provider-info.json new file mode 100644 index 00000000..0b7dc5cf --- /dev/null +++ b/amplify/team-provider-info.json @@ -0,0 +1,19 @@ +{ + "root": { + "awscloudformation": { + "AuthRoleName": "wdd-client-20190405203644-authRole", + "UnauthRoleArn": "arn:aws:iam::367420475204:role/wdd-client-20190405203644-unauthRole", + "AuthRoleArn": "arn:aws:iam::367420475204:role/wdd-client-20190405203644-authRole", + "Region": "ap-northeast-2", + "DeploymentBucketName": "wdd-client-20190405203644-deployment", + "UnauthRoleName": "wdd-client-20190405203644-unauthRole", + "StackName": "wdd-client-20190405203644", + "StackId": "arn:aws:cloudformation:ap-northeast-2:367420475204:stack/wdd-client-20190405203644/16b15770-5797-11e9-bff8-06b6987b4582" + }, + "categories": { + "auth": { + "cognitoc670f476": {} + } + } + } +} \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index 03b58bf9..b15e501a 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -104,8 +104,8 @@ android { applicationId "com.woodongdang.client.android" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 14 - versionName "0.3.2" + versionCode 27 + versionName "0.4.12" ndk { abiFilters "armeabi-v7a", "x86" } @@ -150,16 +150,16 @@ android { } } } - dependencies { + implementation project(':react-native-extra-dimensions-android') + implementation project(':react-native-webview') + implementation project(':amazon-cognito-identity-js') implementation project(':@JWWon_react-native-universal-pedometer') implementation project(':react-native-view-shot') - implementation project(':react-native-webview') implementation project(':react-native-background-timer') implementation project(':react-native-maps') implementation project(':react-native-geolocation-service') implementation project(':react-native-image-picker') - implementation project(':amazon-cognito-identity-js') implementation project(':react-native-gesture-handler') implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}" @@ -171,8 +171,12 @@ dependencies { // For WebP support, including animated WebP implementation 'com.facebook.fresco:animated-webp:1.10.0' implementation 'com.facebook.fresco:webpsupport:1.10.0' + // For react-native-maps + implementation 'com.google.android.gms:play-services-base:+' + implementation 'com.google.android.gms:play-services-maps:+' } + // Run this once to be able to run the application with BUCK // puts all compile dependencies into folder libs for BUCK to use task copyDownloadableDepsToLibs(type: Copy) { diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index d53840cb..00000000 --- a/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android/app/src/debug/res/xml/react_native_config.xml b/android/app/src/debug/res/xml/react_native_config.xml deleted file mode 100644 index c7a997e5..00000000 --- a/android/app/src/debug/res/xml/react_native_config.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - localhost - 10.0.2.2 - 10.0.3.2 - - \ No newline at end of file diff --git a/android/app/src/main/ic_launcher-web.png b/android/app/src/main/ic_launcher-web.png index c82672a8..b04f5b8d 100644 Binary files a/android/app/src/main/ic_launcher-web.png and b/android/app/src/main/ic_launcher-web.png differ diff --git a/android/app/src/main/java/com/woodongdang/client/android/MainApplication.java b/android/app/src/main/java/com/woodongdang/client/android/MainApplication.java index 023b1b60..91032ecd 100644 --- a/android/app/src/main/java/com/woodongdang/client/android/MainApplication.java +++ b/android/app/src/main/java/com/woodongdang/client/android/MainApplication.java @@ -4,13 +4,14 @@ import com.airbnb.android.react.maps.MapsPackage; import com.facebook.react.ReactApplication; +import ca.jaysoo.extradimensions.ExtraDimensionsPackage; +import com.reactnativecommunity.webview.RNCWebViewPackage; +import com.amazonaws.RNAWSCognitoPackage; import com.emesonsantana.BMDPedometer.BMDPedometer; import fr.greweb.reactnativeviewshot.RNViewShotPackage; -import com.reactnativecommunity.webview.RNCWebViewPackage; import com.ocetnik.timer.BackgroundTimerPackage; import com.agontuk.RNFusedLocation.RNFusedLocationPackage; import com.imagepicker.ImagePickerPackage; -import com.amazonaws.RNAWSCognitoPackage; import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; @@ -32,14 +33,15 @@ public boolean getUseDeveloperSupport() { protected List getPackages() { return Arrays.asList( new MainReactPackage(), + new ExtraDimensionsPackage(), + new RNCWebViewPackage(), + new RNAWSCognitoPackage(), new BMDPedometer(), new RNViewShotPackage(), - new RNCWebViewPackage(), new BackgroundTimerPackage(), new MapsPackage(), new RNFusedLocationPackage(), new ImagePickerPackage(), - new RNAWSCognitoPackage(), new RNGestureHandlerPackage() ); } diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 7353dbd1..036d09bc 100644 --- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index 7353dbd1..036d09bc 100644 --- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index 108ab7af..67aa1208 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..4184609b Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png index 41027be7..e3bb057d 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index d8b51193..4bc9e695 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..e660e2fd Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png index 32c4719f..95e9a082 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 67591454..b8bf7595 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..60ae85df Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png index 70fa6cf3..77e9459a 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 174802f8..66eb8c9a 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..35dcf6a8 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png index 3ebb75d2..baff605f 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 51fa8cc6..4dbf34b9 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 00000000..fb3fec88 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png index dd1a1ca1..08e3e8e6 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 1a9ddd6c..d6130f1b 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - WddClient + 우리동네댕댕이 diff --git a/android/build.gradle b/android/build.gradle index 5fb9fad7..d63bbb92 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -11,8 +11,8 @@ buildscript { androidMapsUtilsVersion = "0.5+" } repositories { - google() jcenter() + google() } dependencies { classpath 'com.android.tools.build:gradle:3.3.2' diff --git a/android/settings.gradle b/android/settings.gradle index 06fba156..ecb9fb92 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,10 +1,14 @@ rootProject.name = 'WddClient' +include ':react-native-extra-dimensions-android' +project(':react-native-extra-dimensions-android').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-extra-dimensions-android/android') +include ':react-native-webview' +project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') +include ':amazon-cognito-identity-js' +project(':amazon-cognito-identity-js').projectDir = new File(rootProject.projectDir, '../node_modules/amazon-cognito-identity-js/android') include ':@JWWon_react-native-universal-pedometer' project(':@JWWon_react-native-universal-pedometer').projectDir = new File(rootProject.projectDir, '../node_modules/@JWWon/react-native-universal-pedometer/android') include ':react-native-view-shot' project(':react-native-view-shot').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-view-shot/android') -include ':react-native-webview' -project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') include ':react-native-background-timer' project(':react-native-background-timer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-background-timer/android') include ':react-native-maps' @@ -13,8 +17,6 @@ include ':react-native-geolocation-service' project(':react-native-geolocation-service').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-geolocation-service/android') include ':react-native-image-picker' project(':react-native-image-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-picker/android') -include ':amazon-cognito-identity-js' -project(':amazon-cognito-identity-js').projectDir = new File(rootProject.projectDir, '../node_modules/amazon-cognito-identity-js/android') include ':react-native-gesture-handler' project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android') diff --git a/ios/Podfile b/ios/Podfile index b70415f7..bec25c7f 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -42,10 +42,15 @@ target 'WddClient' do pod 'react-native-background-timer', path: '../node_modules/react-native-background-timer' # react-native-webview dependencies - pod 'react-native-webview', :path => '../node_modules/react-native-webview' pod 'RNViewShot', :path => '../node_modules/react-native-view-shot' + pod 'RNAWSCognito', :path => '../node_modules/amazon-cognito-identity-js' + + + pod 'react-native-webview', :path => '../node_modules/react-native-webview' + + # target 'WddClientTests' do # inherit! :search_paths # # Pods for testing diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 92e49cff..4b0a7c70 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -27,6 +27,7 @@ PODS: - GoogleMaps/Base (2.5.0) - GoogleMaps/Maps (2.5.0): - GoogleMaps/Base + - JKBigInteger2 (0.0.5) - React (0.59.2): - React/Core (= 0.59.2) - react-native-background-timer (2.1.1): @@ -37,7 +38,7 @@ PODS: - React - react-native-maps (0.23.0): - React - - react-native-webview (5.4.3): + - react-native-webview (5.6.2): - React - React/Core (0.59.2): - yoga (= 0.59.2.React) @@ -92,6 +93,9 @@ PODS: - React/Core - React/fishhook - React/RCTBlob + - RNAWSCognito (3.0.10): + - JKBigInteger2 (= 0.0.5) + - React - RNViewShot (2.5.0): - React - yoga (0.59.2.React) @@ -119,6 +123,7 @@ DEPENDENCIES: - React/RCTText (from `../node_modules/react-native`) - React/RCTVibration (from `../node_modules/react-native`) - React/RCTWebSocket (from `../node_modules/react-native`) + - RNAWSCognito (from `../node_modules/amazon-cognito-identity-js`) - RNViewShot (from `../node_modules/react-native-view-shot`) - yoga (from `../node_modules/react-native/ReactCommon/yoga/yoga.podspec`) @@ -127,6 +132,7 @@ SPEC REPOS: - boost-for-react-native - Google-Maps-iOS-Utils - GoogleMaps + - JKBigInteger2 EXTERNAL SOURCES: DoubleConversion: @@ -145,6 +151,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-maps" react-native-webview: :path: "../node_modules/react-native-webview" + RNAWSCognito: + :path: "../node_modules/amazon-cognito-identity-js" RNViewShot: :path: "../node_modules/react-native-view-shot" yoga: @@ -157,14 +165,16 @@ SPEC CHECKSUMS: glog: aefd1eb5dda2ab95ba0938556f34b98e2da3a60d Google-Maps-iOS-Utils: c32891ff472eaaa1fca032beedafa1a013af7875 GoogleMaps: c087b8e5dfe87ca6ebf59adb9b4894a4146bec4f + JKBigInteger2: e91672035c42328c48b7dd015b66812ddf40ca9b React: 1d605e098d69bdf08960787f3446f0a9dc2e2ccf react-native-background-timer: bb7a98c8e97fc7c290de2d423dd09ddb73dcbcbb react-native-google-maps: b946d62e25dc66097921ed82520e45b0b081768a react-native-maps: 066c2afcc89e18726377bcc685315f989ca22449 react-native-webview: a42108b827082f8f0333529b0772102031d5960d + RNAWSCognito: 5f4859d05c2a20dafc8a1bbb15ffc6cc92fa4d0d RNViewShot: fdf9a64f0621ebc4e7c3392a10d2ffb70a7faee4 yoga: 128daf064cacaede0c3bb27424b6b4c71052e6cd -PODFILE CHECKSUM: dc0dc09268c6dcffff6466cc047e6d3e723a18cc +PODFILE CHECKSUM: 8be493e1ae17705de94ca9cec3cc7d26fe843e02 COCOAPODS: 1.5.3 diff --git a/ios/WddClient.xcodeproj/project.pbxproj b/ios/WddClient.xcodeproj/project.pbxproj index 4828fa23..7f8be238 100644 --- a/ios/WddClient.xcodeproj/project.pbxproj +++ b/ios/WddClient.xcodeproj/project.pbxproj @@ -27,13 +27,13 @@ 5535B8892213EBB1003C3BC8 /* NanumSquareRoundB.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5535B8862213EBB1003C3BC8 /* NanumSquareRoundB.ttf */; }; 5535B88A2213EBB1003C3BC8 /* NanumSquareRoundR.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5535B8872213EBB1003C3BC8 /* NanumSquareRoundR.ttf */; }; 5535B88B2213EBB1003C3BC8 /* NanumSquareRoundEB.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5535B8882213EBB1003C3BC8 /* NanumSquareRoundEB.ttf */; }; + 55ED1EEB2265479B00C1A7AD /* libRCTCameraRoll.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55ED1EEA2265479B00C1A7AD /* libRCTCameraRoll.a */; }; 7BE83AF8E24E4C75B31B6307 /* libRNGestureHandler.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 34234F54CB48401884AD9265 /* libRNGestureHandler.a */; }; 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; 91B284EFA369441481773C2A /* libBMDPedometer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BC633DE5CC9046E3BFFBFF66 /* libBMDPedometer.a */; }; ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED297162215061F000B7C4FE /* JavaScriptCore.framework */; }; F3140FCB2A8440F0B3F7D2D0 /* libRNImagePicker.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 131B140406B044E9BC52EDFC /* libRNImagePicker.a */; }; - F9CDAEA6061F4D419EA67270 /* libRNAWSCognito.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EA1E9D63749E47DBB053B909 /* libRNAWSCognito.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -240,13 +240,6 @@ remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; remoteInfo = "cxxreact-tvOS"; }; - 553E098C21FF4F3B00006157 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 935B8A8294874C488BB51B12 /* RNAWSCognito.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 134814201AA4EA6300B7C361; - remoteInfo = RNAWSCognito; - }; 553E098F21FF4F3B00006157 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = F75415774022409ABF75C902 /* RNGestureHandler.xcodeproj */; @@ -370,17 +363,16 @@ 5535B8862213EBB1003C3BC8 /* NanumSquareRoundB.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = NanumSquareRoundB.ttf; sourceTree = ""; }; 5535B8872213EBB1003C3BC8 /* NanumSquareRoundR.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = NanumSquareRoundR.ttf; sourceTree = ""; }; 5535B8882213EBB1003C3BC8 /* NanumSquareRoundEB.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = NanumSquareRoundEB.ttf; sourceTree = ""; }; + 55ED1EEA2265479B00C1A7AD /* libRCTCameraRoll.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libRCTCameraRoll.a; sourceTree = BUILT_PRODUCTS_DIR; }; 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 7A4F252190FF492AAB86F41C /* RNImagePicker.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNImagePicker.xcodeproj; path = "../node_modules/react-native-image-picker/ios/RNImagePicker.xcodeproj"; sourceTree = ""; }; 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 8C07010584D0D7943131F998 /* libPods-WddClient.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WddClient.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 935B8A8294874C488BB51B12 /* RNAWSCognito.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNAWSCognito.xcodeproj; path = "../node_modules/amazon-cognito-identity-js/ios/RNAWSCognito.xcodeproj"; sourceTree = ""; }; 9D78A190941B4EE447858796 /* Pods-WddClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WddClient.debug.xcconfig"; path = "Pods/Target Support Files/Pods-WddClient/Pods-WddClient.debug.xcconfig"; sourceTree = ""; }; ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; }; AE5E350CE91B45B8868713E7 /* NanumSquareRoundEB.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = NanumSquareRoundEB.ttf; path = ../src/assets/fonts/NanumSquareRoundEB.ttf; sourceTree = ""; }; BC633DE5CC9046E3BFFBFF66 /* libBMDPedometer.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libBMDPedometer.a; sourceTree = ""; }; - EA1E9D63749E47DBB053B909 /* libRNAWSCognito.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNAWSCognito.a; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; F75415774022409ABF75C902 /* RNGestureHandler.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNGestureHandler.xcodeproj; path = "../node_modules/react-native-gesture-handler/ios/RNGestureHandler.xcodeproj"; sourceTree = ""; }; F8B3C7E1F97E45B18E232F89 /* NanumSquareRoundB.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = NanumSquareRoundB.ttf; path = ../src/assets/fonts/NanumSquareRoundB.ttf; sourceTree = ""; }; @@ -399,6 +391,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 55ED1EEB2265479B00C1A7AD /* libRCTCameraRoll.a in Frameworks */, ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */, ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */, 11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */, @@ -413,7 +406,6 @@ 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, 7BE83AF8E24E4C75B31B6307 /* libRNGestureHandler.a in Frameworks */, - F9CDAEA6061F4D419EA67270 /* libRNAWSCognito.a in Frameworks */, F3140FCB2A8440F0B3F7D2D0 /* libRNImagePicker.a in Frameworks */, 1EE99741B2B0C9AE054A4818 /* libPods-WddClient.a in Frameworks */, 91B284EFA369441481773C2A /* libBMDPedometer.a in Frameworks */, @@ -543,6 +535,7 @@ 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( + 55ED1EEA2265479B00C1A7AD /* libRCTCameraRoll.a */, ED297162215061F000B7C4FE /* JavaScriptCore.framework */, 2D16E6891FA4F8E400B85C8A /* libReact.a */, 8C07010584D0D7943131F998 /* libPods-WddClient.a */, @@ -575,21 +568,12 @@ isa = PBXGroup; children = ( 34234F54CB48401884AD9265 /* libRNGestureHandler.a */, - EA1E9D63749E47DBB053B909 /* libRNAWSCognito.a */, 131B140406B044E9BC52EDFC /* libRNImagePicker.a */, BC633DE5CC9046E3BFFBFF66 /* libBMDPedometer.a */, ); name = "Recovered References"; sourceTree = ""; }; - 553E098521FF4F3A00006157 /* Products */ = { - isa = PBXGroup; - children = ( - 553E098D21FF4F3B00006157 /* libRNAWSCognito.a */, - ); - name = Products; - sourceTree = ""; - }; 553E098721FF4F3A00006157 /* Products */ = { isa = PBXGroup; children = ( @@ -649,7 +633,6 @@ 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, F75415774022409ABF75C902 /* RNGestureHandler.xcodeproj */, - 935B8A8294874C488BB51B12 /* RNAWSCognito.xcodeproj */, 7A4F252190FF492AAB86F41C /* RNImagePicker.xcodeproj */, 4AFDB46EA92C430DAE503908 /* BMDPedometer.xcodeproj */, ); @@ -833,10 +816,6 @@ ProductGroup = 146834001AC3E56700842450 /* Products */; ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; }, - { - ProductGroup = 553E098521FF4F3A00006157 /* Products */; - ProjectRef = 935B8A8294874C488BB51B12 /* RNAWSCognito.xcodeproj */; - }, { ProductGroup = 553E098721FF4F3A00006157 /* Products */; ProjectRef = F75415774022409ABF75C902 /* RNGestureHandler.xcodeproj */; @@ -1051,13 +1030,6 @@ remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 553E098D21FF4F3B00006157 /* libRNAWSCognito.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libRNAWSCognito.a; - remoteRef = 553E098C21FF4F3B00006157 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; 553E099021FF4F3B00006157 /* libRNGestureHandler.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -1278,7 +1250,6 @@ HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/amazon-cognito-identity-js/ios/**", "$(SRCROOT)/../node_modules/react-native-image-picker/ios", "$(SRCROOT)/../node_modules/react-native-daummap/ios/DaumMap", "$(SRCROOT)/../node_modules/@JWWon/react-native-universal-pedometer/ios/BMDPedometer", @@ -1286,10 +1257,7 @@ INFOPLIST_FILE = WddClientTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -1308,7 +1276,6 @@ HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/amazon-cognito-identity-js/ios/**", "$(SRCROOT)/../node_modules/react-native-image-picker/ios", "$(SRCROOT)/../node_modules/react-native-daummap/ios/DaumMap", "$(SRCROOT)/../node_modules/@JWWon/react-native-universal-pedometer/ios/BMDPedometer", @@ -1316,10 +1283,7 @@ INFOPLIST_FILE = WddClientTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/$(TARGET_NAME)\"", - ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -1347,7 +1311,6 @@ HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/amazon-cognito-identity-js/ios/**", "$(SRCROOT)/../node_modules/react-native-image-picker/ios", "$(SRCROOT)/../node_modules/react-native-daummap/ios/DaumMap", "$(SRCROOT)/../node_modules/@JWWon/react-native-universal-pedometer/ios/BMDPedometer", @@ -1381,7 +1344,6 @@ HEADER_SEARCH_PATHS = ( "$(inherited)", "$(SRCROOT)/../node_modules/react-native-gesture-handler/ios/**", - "$(SRCROOT)/../node_modules/amazon-cognito-identity-js/ios/**", "$(SRCROOT)/../node_modules/react-native-image-picker/ios", "$(SRCROOT)/../node_modules/react-native-daummap/ios/DaumMap", "$(SRCROOT)/../node_modules/@JWWon/react-native-universal-pedometer/ios/BMDPedometer", diff --git a/ios/WddClient.xcodeproj/xcshareddata/xcschemes/WddClient.xcscheme b/ios/WddClient.xcodeproj/xcshareddata/xcschemes/WddClient.xcscheme index b164ef56..65a0bc94 100644 --- a/ios/WddClient.xcodeproj/xcshareddata/xcschemes/WddClient.xcscheme +++ b/ios/WddClient.xcodeproj/xcshareddata/xcschemes/WddClient.xcscheme @@ -80,7 +80,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.3.2 + 0.4.12 CFBundleSignature ???? CFBundleURLTypes @@ -34,7 +34,7 @@ CFBundleVersion - 14 + 27 LSRequiresIPhoneOS NSAppTransportSecurity diff --git a/package-lock.json b/package-lock.json index 560a6b3f..4aebd809 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "WddClient", - "version": "0.3.2", + "version": "0.4.11", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -9,23 +9,23 @@ "from": "github:JWWon/react-native-universal-pedometer" }, "@aws-amplify/analytics": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@aws-amplify/analytics/-/analytics-1.2.11.tgz", - "integrity": "sha512-I5FFiKog/5L/60OONevHdRvRcLPGpzShfyockTH0/Iq+2WBbLkOmUTmPetJHXEMbaUO+zy2NpI4/pX44FeGw+Q==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@aws-amplify/analytics/-/analytics-1.2.13.tgz", + "integrity": "sha512-mbScGspGkT4EwKRH5N9omMajl+VitQiGlvAUAIg6+49tDAz/lAUeJ7tZzZrOCQPoFsQy9kTqt/8ffqXSmCxQYw==", "requires": { - "@aws-amplify/cache": "^1.0.23", - "@aws-amplify/core": "^1.0.23", + "@aws-amplify/cache": "^1.0.25", + "@aws-amplify/core": "^1.0.25", "uuid": "^3.2.1" } }, "@aws-amplify/api": { - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/@aws-amplify/api/-/api-1.0.29.tgz", - "integrity": "sha512-HH7X65T5fcpx+R0Z34HKXAneQ4RzBVV51mRE6pdp66fqGeaOZEY/xMRCFZ+IQnfFckgdcw8gISzGPbsCj653bw==", + "version": "1.0.31", + "resolved": "https://registry.npmjs.org/@aws-amplify/api/-/api-1.0.31.tgz", + "integrity": "sha512-I0Xq4JOO7+oB7x8u3gOKb0O0WgzL8e4xvKnj/dgQ+z6b3AWqWcm0hCwKFZM1SM2M6y7gXbt6t0CY/WVFdVt2Yw==", "requires": { - "@aws-amplify/auth": "^1.2.18", - "@aws-amplify/cache": "^1.0.23", - "@aws-amplify/core": "^1.0.23", + "@aws-amplify/auth": "^1.2.20", + "@aws-amplify/cache": "^1.0.25", + "@aws-amplify/core": "^1.0.25", "@types/zen-observable": "^0.5.3", "axios": "^0.17.0", "graphql": "0.13.0", @@ -45,71 +45,71 @@ } }, "@aws-amplify/auth": { - "version": "1.2.18", - "resolved": "https://registry.npmjs.org/@aws-amplify/auth/-/auth-1.2.18.tgz", - "integrity": "sha512-8fNzSP99Vfh+ZcWWvaBmL5TfB8tXNIvYH36VuH+3hqSICouZ64+aN5aaDAP+jWgk0km1Kqau7DzEVjh6qCfn2Q==", + "version": "1.2.20", + "resolved": "https://registry.npmjs.org/@aws-amplify/auth/-/auth-1.2.20.tgz", + "integrity": "sha512-b8xQV5XjuA2Jq4iD8RLQOTkZfgIFRq11pP3DRdXTndBANInRKueA3jjNaVwI6DDxvegL/SCK2itJ9dbwpQPepw==", "requires": { - "@aws-amplify/cache": "^1.0.23", - "@aws-amplify/core": "^1.0.23", + "@aws-amplify/cache": "^1.0.25", + "@aws-amplify/core": "^1.0.25", "amazon-cognito-auth-js": "^1.3.2", - "amazon-cognito-identity-js": "^3.0.9" + "amazon-cognito-identity-js": "^3.0.10" } }, "@aws-amplify/cache": { - "version": "1.0.23", - "resolved": "https://registry.npmjs.org/@aws-amplify/cache/-/cache-1.0.23.tgz", - "integrity": "sha512-qH120o8A+nwJHs/Cih/HW7fqXto6bShF3hYDxCph7UvuQqBAeNCzu/dmLIO0gxWZnATf8Pjg15u4D1clYQMpaQ==", + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/@aws-amplify/cache/-/cache-1.0.25.tgz", + "integrity": "sha512-UYEkUNhAMqcjrCnRyHUp5Z/DK1jrWjm1d519WN3WLS46c7XCDDkkNV221oGohNWvG9YutKsSJEjnS4pOob8tsQ==", "requires": { - "@aws-amplify/core": "^1.0.23" + "@aws-amplify/core": "^1.0.25" } }, "@aws-amplify/core": { - "version": "1.0.23", - "resolved": "https://registry.npmjs.org/@aws-amplify/core/-/core-1.0.23.tgz", - "integrity": "sha512-zJJcgoYwncJfrbigBbQLU5qF+g6PM3eyM45XwyiwHKixTFHUpQTgq+rCy2wfLodyEjrmggrisR9+wBdVOZvVTg==", + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/@aws-amplify/core/-/core-1.0.25.tgz", + "integrity": "sha512-h0QJoqiGmYm4T4EEI3ZQgE7IBgnEz+vXQlXSsnMDhjtbaxPEO+tAXNSHdnxcoAQCoDK/KMAdHYbu2vY7Hor/SQ==", "requires": { "aws-sdk": "2.329.0", "url": "^0.11.0" } }, "@aws-amplify/interactions": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/@aws-amplify/interactions/-/interactions-1.0.26.tgz", - "integrity": "sha512-9Yaji0os1PNd80AK1NDEMRl3985CuH2orjIK/SeuR707yDFAObrgmbXQuRW9oTl5rYAa5b6kjyFrxfOGB5N7Rg==", + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/@aws-amplify/interactions/-/interactions-1.0.28.tgz", + "integrity": "sha512-ijd2Fk9/loiGK68hI5WdbEaRmgfUQC4qY2meRAb2YQLXiYFCmhwkIcIXN0t9G6dmDrXL3hUFm7SXLaOfd+m7SA==", "requires": { - "@aws-amplify/core": "^1.0.23" + "@aws-amplify/core": "^1.0.25" } }, "@aws-amplify/pubsub": { - "version": "1.0.24", - "resolved": "https://registry.npmjs.org/@aws-amplify/pubsub/-/pubsub-1.0.24.tgz", - "integrity": "sha512-uR3sXIBFnLfVcADgaJLyN+1Ili8pJv6l9tb8J5ZscN+nTKUDVQ4LLI+d9fACC+cCR2Y83slPd4XezrgaFdEBPQ==", + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@aws-amplify/pubsub/-/pubsub-1.0.26.tgz", + "integrity": "sha512-HaF7ypN1cg7XGDJE8796BoB2J0cqpZMKjI26DRA+Cu5w/bV60spTI6CkFgZuq7X1uOaKqrxcV0U2WLumXbj8Sg==", "requires": { - "@aws-amplify/core": "^1.0.23", + "@aws-amplify/core": "^1.0.25", "@types/zen-observable": "^0.5.3", "uuid": "^3.2.1", "zen-observable": "^0.8.6" } }, "@aws-amplify/storage": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/@aws-amplify/storage/-/storage-1.0.26.tgz", - "integrity": "sha512-nJMzRZ3WYTlj/Q1H1DKH1e9Fudp9n9PNcB9QFdnSJ0oTejOhUyd3TnMC1wIKA/XqFlg9CtoVojfOZqLms70XiQ==", + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/@aws-amplify/storage/-/storage-1.0.28.tgz", + "integrity": "sha512-Qwmiw6tNhniOWnWZJ9VfHdXk9AkcRCD6YgqRqF1i+rVmJu3eh4/aci3314UYoC4DRGOu7p0vhV37L9D+l+QMtw==", "requires": { - "@aws-amplify/core": "^1.0.23" + "@aws-amplify/core": "^1.0.25" } }, "@aws-amplify/ui": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/@aws-amplify/ui/-/ui-1.0.17.tgz", - "integrity": "sha512-wG5lGVnSGrtW43yKYxlktV1dZ3h585FMOmpsWkNgSHx7EPzjWY19bMROYuDi0YhKJv9DU2ngkUDQIhgHLljfWA==" + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/@aws-amplify/ui/-/ui-1.0.18.tgz", + "integrity": "sha512-4laTdA1Fu/r0wG8G5M1w7EWAtnH2kgqdAc6g13pVNPpVI53vTKwIJD76m9WHjcF8TKwrzSKoFu9HDml6MCoXCw==" }, "@aws-amplify/xr": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/@aws-amplify/xr/-/xr-0.1.13.tgz", - "integrity": "sha512-3iQTThcUZMy3AhlWgH7wIvl/UDHOsOytDQhUy5o8V/3qWMRNOeLh405okT3s+ujrZ5oKIQvdkmrpDRZVNKwZ7g==", + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/@aws-amplify/xr/-/xr-0.1.15.tgz", + "integrity": "sha512-F9N8gO8rdDzMOOZAB8gTIuCBJBrRJUvYoQSoKO6lGk6reX5W6M2VHosNFp88X3OvXj+MxnGkD+I8dllOputoyg==", "requires": { - "@aws-amplify/core": "^1.0.23" + "@aws-amplify/core": "^1.0.25" } }, "@babel/code-frame": { @@ -1015,13 +1015,12 @@ } }, "@jest/console": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.3.0.tgz", - "integrity": "sha512-NaCty/OOei6rSDcbPdMiCbYCI0KGFGPgGO6B09lwWt5QTxnkuhKYET9El5u5z1GAcSxkQmSMtM63e24YabCWqA==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", + "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", "dev": true, "requires": { "@jest/source-map": "^24.3.0", - "@types/node": "*", "chalk": "^2.0.1", "slash": "^2.0.0" }, @@ -1058,32 +1057,32 @@ } }, "@jest/core": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.5.0.tgz", - "integrity": "sha512-RDZArRzAs51YS7dXG1pbXbWGxK53rvUu8mCDYsgqqqQ6uSOaTjcVyBl2Jce0exT2rSLk38ca7az7t2f3b0/oYQ==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.7.1.tgz", + "integrity": "sha512-ivlZ8HX/FOASfHcb5DJpSPFps8ydfUYzLZfgFFqjkLijYysnIEOieg72YRhO4ZUB32xu40hsSMmaw+IGYeKONA==", "dev": true, "requires": { - "@jest/console": "^24.3.0", - "@jest/reporters": "^24.5.0", - "@jest/test-result": "^24.5.0", - "@jest/transform": "^24.5.0", - "@jest/types": "^24.5.0", + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.5.0", - "jest-config": "^24.5.0", - "jest-haste-map": "^24.5.0", - "jest-message-util": "^24.5.0", + "jest-changed-files": "^24.7.0", + "jest-config": "^24.7.1", + "jest-haste-map": "^24.7.1", + "jest-message-util": "^24.7.1", "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.5.0", - "jest-runner": "^24.5.0", - "jest-runtime": "^24.5.0", - "jest-snapshot": "^24.5.0", - "jest-util": "^24.5.0", - "jest-validate": "^24.5.0", - "jest-watcher": "^24.5.0", + "jest-resolve-dependencies": "^24.7.1", + "jest-runner": "^24.7.1", + "jest-runtime": "^24.7.1", + "jest-snapshot": "^24.7.1", + "jest-util": "^24.7.1", + "jest-validate": "^24.7.0", + "jest-watcher": "^24.7.1", "micromatch": "^3.1.10", "p-each-series": "^1.0.0", "pirates": "^4.0.1", @@ -1428,40 +1427,38 @@ } }, "@jest/environment": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.5.0.tgz", - "integrity": "sha512-tzUHR9SHjMXwM8QmfHb/EJNbF0fjbH4ieefJBvtwO8YErLTrecc1ROj0uo2VnIT6SlpEGZnvdCK6VgKYBo8LsA==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.7.1.tgz", + "integrity": "sha512-wmcTTYc4/KqA+U5h1zQd5FXXynfa7VGP2NfF+c6QeGJ7c+2nStgh65RQWNX62SC716dTtqheTRrZl0j+54oGHw==", "dev": true, "requires": { - "@jest/fake-timers": "^24.5.0", - "@jest/transform": "^24.5.0", - "@jest/types": "^24.5.0", - "@types/node": "*", - "jest-mock": "^24.5.0" + "@jest/fake-timers": "^24.7.1", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", + "jest-mock": "^24.7.0" } }, "@jest/fake-timers": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.5.0.tgz", - "integrity": "sha512-i59KVt3QBz9d+4Qr4QxsKgsIg+NjfuCjSOWj3RQhjF5JNy+eVJDhANQ4WzulzNCHd72srMAykwtRn5NYDGVraw==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.7.1.tgz", + "integrity": "sha512-4vSQJDKfR2jScOe12L9282uiwuwQv9Lk7mgrCSZHA9evB9efB/qx8i0KJxsAKtp8fgJYBJdYY7ZU6u3F4/pyjA==", "dev": true, "requires": { - "@jest/types": "^24.5.0", - "@types/node": "*", - "jest-message-util": "^24.5.0", - "jest-mock": "^24.5.0" + "@jest/types": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-mock": "^24.7.0" } }, "@jest/reporters": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.5.0.tgz", - "integrity": "sha512-vfpceiaKtGgnuC3ss5czWOihKOUSyjJA4M4udm6nH8xgqsuQYcyDCi4nMMcBKsHXWgz9/V5G7iisnZGfOh1w6Q==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.7.1.tgz", + "integrity": "sha512-bO+WYNwHLNhrjB9EbPL4kX/mCCG4ZhhfWmO3m4FSpbgr7N83MFejayz30kKjgqr7smLyeaRFCBQMbXpUgnhAJw==", "dev": true, "requires": { - "@jest/environment": "^24.5.0", - "@jest/test-result": "^24.5.0", - "@jest/transform": "^24.5.0", - "@jest/types": "^24.5.0", + "@jest/environment": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.2", @@ -1469,11 +1466,11 @@ "istanbul-lib-coverage": "^2.0.2", "istanbul-lib-instrument": "^3.0.1", "istanbul-lib-source-maps": "^3.0.1", - "jest-haste-map": "^24.5.0", - "jest-resolve": "^24.5.0", - "jest-runtime": "^24.5.0", - "jest-util": "^24.5.0", - "jest-worker": "^24.4.0", + "jest-haste-map": "^24.7.1", + "jest-resolve": "^24.7.1", + "jest-runtime": "^24.7.1", + "jest-util": "^24.7.1", + "jest-worker": "^24.6.0", "node-notifier": "^5.2.1", "slash": "^2.0.0", "source-map": "^0.6.0", @@ -1501,12 +1498,11 @@ } }, "jest-worker": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.4.0.tgz", - "integrity": "sha512-BH9X/klG9vxwoO99ZBUbZFfV8qO0XNZ5SIiCyYK2zOuJBl6YJVAeNIQjcoOVNu4HGEHeYEKsUWws8kSlSbZ9YQ==", + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", + "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", "dev": true, "requires": { - "@types/node": "*", "merge-stream": "^1.0.1", "supports-color": "^6.1.0" }, @@ -1565,32 +1561,44 @@ } }, "@jest/test-result": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.5.0.tgz", - "integrity": "sha512-u66j2vBfa8Bli1+o3rCaVnVYa9O8CAFZeqiqLVhnarXtreSXG33YQ6vNYBogT7+nYiFNOohTU21BKiHlgmxD5A==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.7.1.tgz", + "integrity": "sha512-3U7wITxstdEc2HMfBX7Yx3JZgiNBubwDqQMh+BXmZXHa3G13YWF3p6cK+5g0hGkN3iufg/vGPl3hLxQXD74Npg==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/types": "^24.7.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.7.1.tgz", + "integrity": "sha512-84HQkCpVZI/G1zq53gHJvSmhUer4aMYp9tTaffW28Ih5OxfCg8hGr3nTSbL1OhVDRrFZwvF+/R9gY6JRkDUpUA==", "dev": true, "requires": { - "@jest/console": "^24.3.0", - "@jest/types": "^24.5.0", - "@types/istanbul-lib-coverage": "^1.1.0" + "@jest/test-result": "^24.7.1", + "jest-haste-map": "^24.7.1", + "jest-runner": "^24.7.1", + "jest-runtime": "^24.7.1" } }, "@jest/transform": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.5.0.tgz", - "integrity": "sha512-XSsDz1gdR/QMmB8UCKlweAReQsZrD/DK7FuDlNo/pE8EcKMrfi2kqLRk8h8Gy/PDzgqJj64jNEzOce9pR8oj1w==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.7.1.tgz", + "integrity": "sha512-EsOUqP9ULuJ66IkZQhI5LufCHlTbi7hrcllRMUEV/tOgqBVQi93+9qEvkX0n8mYpVXQ8VjwmICeRgg58mrtIEw==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "babel-plugin-istanbul": "^5.1.0", "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.5.0", + "jest-haste-map": "^24.7.1", "jest-regex-util": "^24.3.0", - "jest-util": "^24.5.0", + "jest-util": "^24.7.1", "micromatch": "^3.1.10", "realpath-native": "^1.1.0", "slash": "^2.0.0", @@ -1930,19 +1938,19 @@ } }, "@jest/types": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.5.0.tgz", - "integrity": "sha512-kN7RFzNMf2R8UDadPOl6ReyI+MT8xfqRuAnuVL+i4gwjv/zubdDK+EDeLHYwq1j0CSSR2W/MmgaRlMZJzXdmVA==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.7.0.tgz", + "integrity": "sha512-ipJUa2rFWiKoBqMKP63Myb6h9+iT3FHRTF2M8OR6irxWzItisa8i4dcSg14IbvmXUnBlHBlUQPYUHWyX3UPpYA==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^1.1.0", + "@types/istanbul-lib-coverage": "^2.0.0", "@types/yargs": "^12.0.9" } }, "@react-native-community/cli": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-1.5.1.tgz", - "integrity": "sha512-HFCYxI6WW3SoayrOSdhYxor5CaF/SBp7W73TyvTRRNAqQdA9/NX9wMZly+UpmFQkQFkiLvgc2yqS5vT918XXUw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-1.6.0.tgz", + "integrity": "sha512-OV3N5O/wzjb8OTZDiFerX0gf9/KzLJOvDttU38BqIvn8+OLkH6SIgGrKked9vrKKvH5bFG6jmCmKCW5gP+tOwQ==", "requires": { "chalk": "^1.1.1", "commander": "^2.19.0", @@ -2040,11 +2048,10 @@ } }, "@react-navigation/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-3.2.0.tgz", - "integrity": "sha512-MXjTqqPFbifXGlws4hSye9Ax4dEM2OvV7VMEJOJU9TbzQjyewi59Cjplbt8pYQ5ummvkKeRS2FlQYIygNR5oCQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-3.2.1.tgz", + "integrity": "sha512-sCAXGzBRHkUg8vB6wVDhagPIDihyZC5dVfq+9lCuG7iSetROdOdKHk0KHKj4wxoUaQ3eR4Y71B+pZvO1RvLqNg==", "requires": { - "create-react-context": "0.2.2", "hoist-non-react-statics": "^2.5.5", "path-to-regexp": "^1.7.0", "query-string": "^6.2.0", @@ -2160,18 +2167,30 @@ } }, "@types/hoist-non-react-statics": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", - "integrity": "sha512-O2OGyW9wlO2bbDmZRH17MecArQfsIa1g//ve2IJk6BnmwEglFz5kdhP1BlgeqjVNH5IHIhsc83DWFo8StCe8+Q==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", "dev": true, "requires": { - "@types/react": "*" + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", + "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "dev": true, + "requires": { + "react-is": "^16.7.0" + } + } } }, "@types/istanbul-lib-coverage": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz", - "integrity": "sha512-ohkhb9LehJy+PA40rDtGAji61NCgdtKLAlFoYp4cnuuQEswwdK3vz9SOIkkyc3wrk8dzjphQApNs56yyXLStaQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.0.tgz", + "integrity": "sha512-eAtOAFZefEnfJiRFQBGw1eYqa5GTLCZ1y86N0XSI/D6EB+E8z6VPV/UL7Gi5UEclFqoQk+6NRqEDsfmDLXn8sg==", "dev": true }, "@types/jest": { @@ -2196,9 +2215,9 @@ "dev": true }, "@types/node": { - "version": "11.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.7.tgz", - "integrity": "sha512-bHbRcyD6XpXVLg42QYaQCjvDXaCFkvb3WbCIxSDmhGbJYVroxvYzekk9QGg1beeIawfvSLkdZpP0h7jxE4ihnA==", + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.0.tgz", + "integrity": "sha512-rx29MMkRdVmzunmiA4lzBYJNnXsW/PhG4kMBy2ATsYaDjGGR75dCFEVVROKpNwlVdcUX3xxlghKQOeDPBJobng==", "dev": true }, "@types/prop-types": { @@ -2255,9 +2274,9 @@ } }, "@types/react-navigation": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/react-navigation/-/react-navigation-3.0.5.tgz", - "integrity": "sha512-LYQRe/tz8Moo35eN8QmNN5jKbQMrDGOEhzFjsT3K2inHnRQUknN38+L3xtN1wcBwI2576Vw4hpi9E79pBaU+8A==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/react-navigation/-/react-navigation-3.0.6.tgz", + "integrity": "sha512-4JoHIR7qrjwYDmJiuvYEOgme2Nl5ieiDEM5eRMHV3HkRiUmeHRlVfmqTCljcDUwkFJHhK2JZfyhppA/CZY+M8w==", "dev": true, "requires": { "@types/react": "*", @@ -2265,9 +2284,9 @@ } }, "@types/react-redux": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.0.5.tgz", - "integrity": "sha512-O0WyoSbrMofJRxtSDe8qYhnmr2SSlTnshlQdnpgpD763L8BzlhXuEseksV7LSoCUwZ7vN4YqpQThl3jp02sceQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.0.6.tgz", + "integrity": "sha512-Nlofk/xq8oVWpylvrFayezNb/HONsYJfjlSmTmZ7xoMDe+Muf6c1qHMVRZ7C5S2W1+iVcY21ggZwlUgLv+66hQ==", "dev": true, "requires": { "@types/hoist-non-react-statics": "^3.3.0", @@ -2297,9 +2316,9 @@ "dev": true }, "@types/yargs": { - "version": "12.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.10.tgz", - "integrity": "sha512-WsVzTPshvCSbHThUduGGxbmnwcpkgSctHGHTqzWyFg4lYAuV5qXlyFPOsP3OWqCINfmg/8VXP+zJaa4OxEsBQQ==", + "version": "12.0.11", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.11.tgz", + "integrity": "sha512-IsU1TD+8cQCyG76ZqxP0cVFnofvfzT8p/wO8ENT4jbN/KKN3grsHFgHNl/U+08s33ayX4LwI85cEhYXCOlOkMw==", "dev": true }, "@types/zen-observable": { @@ -2378,9 +2397,9 @@ } }, "amazon-cognito-identity-js": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-3.0.9.tgz", - "integrity": "sha512-RhgFLF81jmjjNIn8EbofPKeyarQ3aiGwBts1LtZDsmE8bHsRSom15xA23XTAfPBpboW+XZyFYbNc6vnOHnIAwg==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-3.0.10.tgz", + "integrity": "sha512-J1AsmnUl0UULOBj8On5g5Iq4ZkGTULBuvZR6xeage5t56svEnkeNrAR6FXYylhgUdcsavq/JZTYpzZoICXZILg==", "requires": { "buffer": "4.9.1", "crypto-js": "^3.1.9-1", @@ -2853,26 +2872,26 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "aws-amplify": { - "version": "1.1.22", - "resolved": "https://registry.npmjs.org/aws-amplify/-/aws-amplify-1.1.22.tgz", - "integrity": "sha512-kNYJgDAdah8I0e3oLGPKGVvcYcOxV3cDSgUvXvUzvNVZW1FaaVhcgV7BMMhIpOlIeoC8XyrSwOg/AtLi+Fa59w==", - "requires": { - "@aws-amplify/analytics": "^1.2.11", - "@aws-amplify/api": "^1.0.29", - "@aws-amplify/auth": "^1.2.18", - "@aws-amplify/cache": "^1.0.23", - "@aws-amplify/core": "^1.0.23", - "@aws-amplify/interactions": "^1.0.26", - "@aws-amplify/pubsub": "^1.0.24", - "@aws-amplify/storage": "^1.0.26", - "@aws-amplify/ui": "^1.0.17", - "@aws-amplify/xr": "^0.1.13" + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/aws-amplify/-/aws-amplify-1.1.24.tgz", + "integrity": "sha512-F2bUrTOVzJgcV+lyCj0ET8KTFFmEy4ph5869h3cdsyW/u42hr9/iqQL+fkYLMIV6BUcEwghtonac8Usjk6chrQ==", + "requires": { + "@aws-amplify/analytics": "^1.2.13", + "@aws-amplify/api": "^1.0.31", + "@aws-amplify/auth": "^1.2.20", + "@aws-amplify/cache": "^1.0.25", + "@aws-amplify/core": "^1.0.25", + "@aws-amplify/interactions": "^1.0.28", + "@aws-amplify/pubsub": "^1.0.26", + "@aws-amplify/storage": "^1.0.28", + "@aws-amplify/ui": "^1.0.18", + "@aws-amplify/xr": "^0.1.15" } }, "aws-amplify-react-native": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/aws-amplify-react-native/-/aws-amplify-react-native-2.1.8.tgz", - "integrity": "sha512-8D8qXdbjuftrXryAvGg7l7dcM0bGG+g68uvsFQ0il5ZgQH4HLfP7mpv4/OwGDxRbO0DssklZLHdKN/AtYx1GNA==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/aws-amplify-react-native/-/aws-amplify-react-native-2.1.9.tgz", + "integrity": "sha512-lXcuZrjBqXavAod7I6jKOJHl6oGgh0isntdho0xLwQhCi+JatccQDpbxBztNC0M7utQJLfVFIEbGy7WcS8LGiA==", "requires": { "axios": "^0.17.1", "babel-preset-es2015": "^6.24.1", @@ -2898,6 +2917,36 @@ "base64-js": "^1.0.2", "ieee754": "^1.1.4" } + }, + "react-native-vector-icons": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-5.0.0.tgz", + "integrity": "sha512-3ZmLGhQFk5QeHuttx0tOpghXhpVMGwXzb3pVaW/M8Qj0qkcg7koVyZmoR9vABQuxFC6KbM3l6/WLYZPh2aGfuQ==", + "requires": { + "lodash": "^4.0.0", + "prop-types": "^15.5.10", + "yargs": "^8.0.2" + } + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } } } }, @@ -3049,16 +3098,16 @@ } }, "babel-jest": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.5.0.tgz", - "integrity": "sha512-0fKCXyRwxFTJL0UXDJiT2xYxO9Lu2vBd9n+cC+eDjESzcVG3s2DRGAxbzJX21fceB1WYoBjAh8pQ83dKcl003g==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.7.1.tgz", + "integrity": "sha512-GPnLqfk8Mtt0i4OemjWkChi73A3ALs4w2/QbG64uAj8b5mmwzxc7jbJVRZt8NJkxi6FopVHog9S3xX6UJKb2qg==", "dev": true, "requires": { - "@jest/transform": "^24.5.0", - "@jest/types": "^24.5.0", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", "@types/babel__core": "^7.1.0", "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.3.0", + "babel-preset-jest": "^24.6.0", "chalk": "^2.4.2", "slash": "^2.0.0" }, @@ -3159,17 +3208,17 @@ } }, "p-try": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz", - "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true } } }, "babel-plugin-jest-hoist": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.3.0.tgz", - "integrity": "sha512-nWh4N1mVH55Tzhx2isvUN5ebM5CDUvIpXPZYMRazQughie/EqGnbR+czzoQlhUmJG9pPJmYDRhvocotb2THl1w==", + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", + "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", "dev": true, "requires": { "@types/babel__traverse": "^7.0.6" @@ -3505,13 +3554,13 @@ } }, "babel-preset-jest": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.3.0.tgz", - "integrity": "sha512-VGTV2QYBa/Kn3WCOKdfS31j9qomaXSgJqi65B6o05/1GsJyj9LVhSljM9ro4S+IBGj/ENhNBuH9bpqzztKAQSw==", + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", + "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", "dev": true, "requires": { "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.3.0" + "babel-plugin-jest-hoist": "^24.6.0" } }, "babel-runtime": { @@ -4133,36 +4182,6 @@ } } }, - "create-react-context": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.2.tgz", - "integrity": "sha512-KkpaLARMhsTsgp0d2NA/R94F/eDLbhXERdIq3LvX2biCAXcDvHYoOqHfWCHf1+OLj+HKBotLG3KqaOOf+C1C+A==", - "requires": { - "fbjs": "^0.8.0", - "gud": "^1.0.0" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" - }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - } - } - } - }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", @@ -4185,9 +4204,9 @@ "dev": true }, "cssstyle": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.1.tgz", - "integrity": "sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", + "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", "dev": true, "requires": { "cssom": "0.3.x" @@ -4418,6 +4437,11 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -4605,16 +4629,16 @@ } }, "expect": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.5.0.tgz", - "integrity": "sha512-p2Gmc0CLxOgkyA93ySWmHFYHUPFIHG6XZ06l7WArWAsrqYVaVEkOU5NtT5i68KUyGKbkQgDCkiT65bWmdoL6Bw==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.7.1.tgz", + "integrity": "sha512-mGfvMTPduksV3xoI0xur56pQsg2vJjNf5+a+bXOjqCkiCBbmCayrBbHS/75y9K430cfqyocPr2ZjiNiRx4SRKw==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "ansi-styles": "^3.2.0", "jest-get-type": "^24.3.0", - "jest-matcher-utils": "^24.5.0", - "jest-message-util": "^24.5.0", + "jest-matcher-utils": "^24.7.0", + "jest-message-util": "^24.7.1", "jest-regex-util": "^24.3.0" }, "dependencies": { @@ -5524,11 +5548,6 @@ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" }, - "gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" - }, "handlebars": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", @@ -5548,9 +5567,9 @@ "dev": true }, "uglify-js": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.2.tgz", - "integrity": "sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.3.tgz", + "integrity": "sha512-rIQPT2UMDnk4jRX+w4WO84/pebU2jiLsjgIyrCktYgSvx28enOE3iYQMr+BD1rHiitWnDmpu0cY/LfIEpKcjcw==", "dev": true, "optional": true, "requires": { @@ -5735,9 +5754,9 @@ "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==" }, "immer": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/immer/-/immer-2.1.4.tgz", - "integrity": "sha512-6UPbG/DIXFSWp10oJJaCPl5/lp5GhGEscDH0QGYKc5EMT5PLZ9+L8hhyc44zRHksI7CQXJp8r6nlDR3n09X6SA==" + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/immer/-/immer-2.1.5.tgz", + "integrity": "sha512-xyjQyTBYIeiz6jd02Hg12jV+9QISwF1crLcwTlzHpWH4e0ryNWj1kacpTwimK3bJV5NKKXw458G2vpqoB/inFA==" }, "import-fresh": { "version": "2.0.0", @@ -6169,13 +6188,13 @@ "integrity": "sha512-eaDsM/PY8D/X5mYQhecVc5/9xvSHED7yPON+ffQroBeTuqUVm7dfphMkK8NksXuImqZlVRoKtrNfMIVCYIqaUQ==" }, "jest": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.5.0.tgz", - "integrity": "sha512-lxL+Fq5/RH7inxxmfS2aZLCf8MsS+YCUBfeiNO6BWz/MmjhDGaIEA/2bzEf9q4Q0X+mtFHiinHFvQ0u+RvW/qQ==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.7.1.tgz", + "integrity": "sha512-AbvRar5r++izmqo5gdbAjTeA6uNRGoNRuj5vHB0OnDXo2DXWZJVuaObiGgtlvhKb+cWy2oYbQSfxv7Q7GjnAtA==", "dev": true, "requires": { "import-local": "^2.0.0", - "jest-cli": "^24.5.0" + "jest-cli": "^24.7.1" }, "dependencies": { "ansi-regex": { @@ -6194,9 +6213,9 @@ } }, "camelcase": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", - "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "chalk": { @@ -6274,21 +6293,21 @@ "dev": true }, "jest-cli": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.5.0.tgz", - "integrity": "sha512-P+Jp0SLO4KWN0cGlNtC7JV0dW1eSFR7eRpoOucP2UM0sqlzp/bVHeo71Omonvigrj9AvCKy7NtQANtqJ7FXz8g==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.7.1.tgz", + "integrity": "sha512-32OBoSCVPzcTslGFl6yVCMzB2SqX3IrWwZCY5mZYkb0D2WsogmU3eV2o8z7+gRQa4o4sZPX/k7GU+II7CxM6WQ==", "dev": true, "requires": { - "@jest/core": "^24.5.0", - "@jest/test-result": "^24.5.0", - "@jest/types": "^24.5.0", + "@jest/core": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", "chalk": "^2.0.1", "exit": "^0.1.2", "import-local": "^2.0.0", "is-ci": "^2.0.0", - "jest-config": "^24.5.0", - "jest-util": "^24.5.0", - "jest-validate": "^24.5.0", + "jest-config": "^24.7.1", + "jest-util": "^24.7.1", + "jest-validate": "^24.7.0", "prompts": "^2.0.1", "realpath-native": "^1.1.0", "yargs": "^12.0.2" @@ -6314,9 +6333,9 @@ } }, "mem": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz", - "integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", @@ -6325,9 +6344,9 @@ } }, "mimic-fn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz", - "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "os-locale": { @@ -6360,9 +6379,9 @@ } }, "p-try": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz", - "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "strip-ansi": { @@ -6416,12 +6435,12 @@ } }, "jest-changed-files": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.5.0.tgz", - "integrity": "sha512-Ikl29dosYnTsH9pYa1Tv9POkILBhN/TLZ37xbzgNsZ1D2+2n+8oEZS2yP1BrHn/T4Rs4Ggwwbp/x8CKOS5YJOg==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.7.0.tgz", + "integrity": "sha512-33BgewurnwSfJrW7T5/ZAXGE44o7swLslwh8aUckzq2e17/2Os1V0QU506ZNik3hjs8MgnEMKNkcud442NCDTw==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "execa": "^1.0.0", "throat": "^4.0.0" }, @@ -6466,26 +6485,27 @@ } }, "jest-config": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.5.0.tgz", - "integrity": "sha512-t2UTh0Z2uZhGBNVseF8wA2DS2SuBiLOL6qpLq18+OZGfFUxTM7BzUVKyHFN/vuN+s/aslY1COW95j1Rw81huOQ==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.7.1.tgz", + "integrity": "sha512-8FlJNLI+X+MU37j7j8RE4DnJkvAghXmBWdArVzypW6WxfGuxiL/CCkzBg0gHtXhD2rxla3IMOSUAHylSKYJ83g==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^24.5.0", - "babel-jest": "^24.5.0", + "@jest/test-sequencer": "^24.7.1", + "@jest/types": "^24.7.0", + "babel-jest": "^24.7.1", "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^24.5.0", - "jest-environment-node": "^24.5.0", + "jest-environment-jsdom": "^24.7.1", + "jest-environment-node": "^24.7.1", "jest-get-type": "^24.3.0", - "jest-jasmine2": "^24.5.0", + "jest-jasmine2": "^24.7.1", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.5.0", - "jest-util": "^24.5.0", - "jest-validate": "^24.5.0", + "jest-resolve": "^24.7.1", + "jest-util": "^24.7.1", + "jest-validate": "^24.7.0", "micromatch": "^3.1.10", - "pretty-format": "^24.5.0", + "pretty-format": "^24.7.0", "realpath-native": "^1.1.0" }, "dependencies": { @@ -6799,23 +6819,17 @@ } }, "pretty-format": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.5.0.tgz", - "integrity": "sha512-/3RuSghukCf8Riu5Ncve0iI+BzVkbRU5EeUoArKARZobREycuH5O4waxvaNIloEXdb0qwgmEAed5vTpX1HNROQ==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz", + "integrity": "sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" } }, - "react-is": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.5.tgz", - "integrity": "sha512-sudt2uq5P/2TznPV4Wtdi+Lnq3yaYW8LfvPKLM9BKD8jJNBkxMVyB0C9/GmVhLw7Jbdmndk/73n7XQGeN9A3QQ==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6828,15 +6842,15 @@ } }, "jest-diff": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.5.0.tgz", - "integrity": "sha512-mCILZd9r7zqL9Uh6yNoXjwGQx0/J43OD2vvWVKwOEOLZliQOsojXwqboubAQ+Tszrb6DHGmNU7m4whGeB9YOqw==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.7.0.tgz", + "integrity": "sha512-ULQZ5B1lWpH70O4xsANC4tf4Ko6RrpwhE3PtG6ERjMg1TiYTC2Wp4IntJVGro6a8HG9luYHhhmF4grF0Pltckg==", "dev": true, "requires": { "chalk": "^2.0.1", "diff-sequences": "^24.3.0", "jest-get-type": "^24.3.0", - "pretty-format": "^24.5.0" + "pretty-format": "^24.7.0" }, "dependencies": { "ansi-regex": { @@ -6866,23 +6880,17 @@ } }, "pretty-format": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.5.0.tgz", - "integrity": "sha512-/3RuSghukCf8Riu5Ncve0iI+BzVkbRU5EeUoArKARZobREycuH5O4waxvaNIloEXdb0qwgmEAed5vTpX1HNROQ==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz", + "integrity": "sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" } }, - "react-is": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.5.tgz", - "integrity": "sha512-sudt2uq5P/2TznPV4Wtdi+Lnq3yaYW8LfvPKLM9BKD8jJNBkxMVyB0C9/GmVhLw7Jbdmndk/73n7XQGeN9A3QQ==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6904,16 +6912,16 @@ } }, "jest-each": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.5.0.tgz", - "integrity": "sha512-6gy3Kh37PwIT5sNvNY2VchtIFOOBh8UCYnBlxXMb5sr5wpJUDPTUATX2Axq1Vfk+HWTMpsYPeVYp4TXx5uqUBw==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.7.1.tgz", + "integrity": "sha512-4fsS8fEfLa3lfnI1Jw6NxjhyRTgfpuOVTeUZZFyVYqeTa4hPhr2YkToUhouuLTrL2eMGOfpbdMyRx0GQ/VooKA==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "chalk": "^2.0.1", "jest-get-type": "^24.3.0", - "jest-util": "^24.5.0", - "pretty-format": "^24.5.0" + "jest-util": "^24.7.1", + "pretty-format": "^24.7.0" }, "dependencies": { "ansi-regex": { @@ -6943,23 +6951,17 @@ } }, "pretty-format": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.5.0.tgz", - "integrity": "sha512-/3RuSghukCf8Riu5Ncve0iI+BzVkbRU5EeUoArKARZobREycuH5O4waxvaNIloEXdb0qwgmEAed5vTpX1HNROQ==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz", + "integrity": "sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" } }, - "react-is": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.5.tgz", - "integrity": "sha512-sudt2uq5P/2TznPV4Wtdi+Lnq3yaYW8LfvPKLM9BKD8jJNBkxMVyB0C9/GmVhLw7Jbdmndk/73n7XQGeN9A3QQ==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6972,30 +6974,30 @@ } }, "jest-environment-jsdom": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.5.0.tgz", - "integrity": "sha512-62Ih5HbdAWcsqBx2ktUnor/mABBo1U111AvZWcLKeWN/n/gc5ZvDBKe4Og44fQdHKiXClrNGC6G0mBo6wrPeGQ==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.7.1.tgz", + "integrity": "sha512-Gnhb+RqE2JuQGb3kJsLF8vfqjt3PHKSstq4Xc8ic+ax7QKo4Z0RWGucU3YV+DwKR3T9SYc+3YCUQEJs8r7+Jxg==", "dev": true, "requires": { - "@jest/environment": "^24.5.0", - "@jest/fake-timers": "^24.5.0", - "@jest/types": "^24.5.0", - "jest-mock": "^24.5.0", - "jest-util": "^24.5.0", + "@jest/environment": "^24.7.1", + "@jest/fake-timers": "^24.7.1", + "@jest/types": "^24.7.0", + "jest-mock": "^24.7.0", + "jest-util": "^24.7.1", "jsdom": "^11.5.1" } }, "jest-environment-node": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.5.0.tgz", - "integrity": "sha512-du6FuyWr/GbKLsmAbzNF9mpr2Iu2zWSaq/BNHzX+vgOcts9f2ayXBweS7RAhr+6bLp6qRpMB6utAMF5Ygktxnw==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.7.1.tgz", + "integrity": "sha512-GJJQt1p9/C6aj6yNZMvovZuxTUd+BEJprETdvTKSb4kHcw4mFj8777USQV0FJoJ4V3djpOwA5eWyPwfq//PFBA==", "dev": true, "requires": { - "@jest/environment": "^24.5.0", - "@jest/fake-timers": "^24.5.0", - "@jest/types": "^24.5.0", - "jest-mock": "^24.5.0", - "jest-util": "^24.5.0" + "@jest/environment": "^24.7.1", + "@jest/fake-timers": "^24.7.1", + "@jest/types": "^24.7.0", + "jest-mock": "^24.7.0", + "jest-util": "^24.7.1" } }, "jest-get-type": { @@ -7005,20 +7007,23 @@ "dev": true }, "jest-haste-map": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.5.0.tgz", - "integrity": "sha512-mb4Yrcjw9vBgSvobDwH8QUovxApdimGcOkp+V1ucGGw4Uvr3VzZQBJhNm1UY3dXYm4XXyTW2G7IBEZ9pM2ggRQ==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.7.1.tgz", + "integrity": "sha512-g0tWkzjpHD2qa03mTKhlydbmmYiA2KdcJe762SbfFo/7NIMgBWAA0XqQlApPwkWOF7Cxoi/gUqL0i6DIoLpMBw==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", + "anymatch": "^2.0.0", "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", "graceful-fs": "^4.1.15", "invariant": "^2.2.4", "jest-serializer": "^24.4.0", - "jest-util": "^24.5.0", - "jest-worker": "^24.4.0", + "jest-util": "^24.7.1", + "jest-worker": "^24.6.0", "micromatch": "^3.1.10", - "sane": "^4.0.3" + "sane": "^4.0.3", + "walker": "^1.0.7" }, "dependencies": { "@cnakazawa/watch": { @@ -7340,12 +7345,11 @@ "dev": true }, "jest-worker": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.4.0.tgz", - "integrity": "sha512-BH9X/klG9vxwoO99ZBUbZFfV8qO0XNZ5SIiCyYK2zOuJBl6YJVAeNIQjcoOVNu4HGEHeYEKsUWws8kSlSbZ9YQ==", + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", + "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", "dev": true, "requires": { - "@types/node": "*", "merge-stream": "^1.0.1", "supports-color": "^6.1.0" } @@ -7412,26 +7416,26 @@ } }, "jest-jasmine2": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.5.0.tgz", - "integrity": "sha512-sfVrxVcx1rNUbBeyIyhkqZ4q+seNKyAG6iM0S2TYBdQsXjoFDdqWFfsUxb6uXSsbimbXX/NMkJIwUZ1uT9+/Aw==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.7.1.tgz", + "integrity": "sha512-Y/9AOJDV1XS44wNwCaThq4Pw3gBPiOv/s6NcbOAkVRRUEPu+36L2xoPsqQXsDrxoBerqeyslpn2TpCI8Zr6J2w==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.5.0", - "@jest/test-result": "^24.5.0", - "@jest/types": "^24.5.0", + "@jest/environment": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^24.5.0", + "expect": "^24.7.1", "is-generator-fn": "^2.0.0", - "jest-each": "^24.5.0", - "jest-matcher-utils": "^24.5.0", - "jest-message-util": "^24.5.0", - "jest-runtime": "^24.5.0", - "jest-snapshot": "^24.5.0", - "jest-util": "^24.5.0", - "pretty-format": "^24.5.0", + "jest-each": "^24.7.1", + "jest-matcher-utils": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-runtime": "^24.7.1", + "jest-snapshot": "^24.7.1", + "jest-util": "^24.7.1", + "pretty-format": "^24.7.0", "throat": "^4.0.0" }, "dependencies": { @@ -7462,23 +7466,17 @@ } }, "pretty-format": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.5.0.tgz", - "integrity": "sha512-/3RuSghukCf8Riu5Ncve0iI+BzVkbRU5EeUoArKARZobREycuH5O4waxvaNIloEXdb0qwgmEAed5vTpX1HNROQ==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz", + "integrity": "sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" } }, - "react-is": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.5.tgz", - "integrity": "sha512-sudt2uq5P/2TznPV4Wtdi+Lnq3yaYW8LfvPKLM9BKD8jJNBkxMVyB0C9/GmVhLw7Jbdmndk/73n7XQGeN9A3QQ==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -7491,12 +7489,12 @@ } }, "jest-leak-detector": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.5.0.tgz", - "integrity": "sha512-LZKBjGovFRx3cRBkqmIg+BZnxbrLqhQl09IziMk3oeh1OV81Hg30RUIx885mq8qBv1PA0comB9bjKcuyNO1bCQ==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.7.0.tgz", + "integrity": "sha512-zV0qHKZGXtmPVVzT99CVEcHE9XDf+8LwiE0Ob7jjezERiGVljmqKFWpV2IkG+rkFIEUHFEkMiICu7wnoPM/RoQ==", "dev": true, "requires": { - "pretty-format": "^24.5.0" + "pretty-format": "^24.7.0" }, "dependencies": { "ansi-regex": { @@ -7515,35 +7513,29 @@ } }, "pretty-format": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.5.0.tgz", - "integrity": "sha512-/3RuSghukCf8Riu5Ncve0iI+BzVkbRU5EeUoArKARZobREycuH5O4waxvaNIloEXdb0qwgmEAed5vTpX1HNROQ==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz", + "integrity": "sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" } - }, - "react-is": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.5.tgz", - "integrity": "sha512-sudt2uq5P/2TznPV4Wtdi+Lnq3yaYW8LfvPKLM9BKD8jJNBkxMVyB0C9/GmVhLw7Jbdmndk/73n7XQGeN9A3QQ==", - "dev": true } } }, "jest-matcher-utils": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.5.0.tgz", - "integrity": "sha512-QM1nmLROjLj8GMGzg5VBra3I9hLpjMPtF1YqzQS3rvWn2ltGZLrGAO1KQ9zUCVi5aCvrkbS5Ndm2evIP9yZg1Q==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.7.0.tgz", + "integrity": "sha512-158ieSgk3LNXeUhbVJYRXyTPSCqNgVXOp/GT7O94mYd3pk/8+odKTyR1JLtNOQSPzNi8NFYVONtvSWA/e1RDXg==", "dev": true, "requires": { "chalk": "^2.0.1", - "jest-diff": "^24.5.0", + "jest-diff": "^24.7.0", "jest-get-type": "^24.3.0", - "pretty-format": "^24.5.0" + "pretty-format": "^24.7.0" }, "dependencies": { "ansi-regex": { @@ -7573,23 +7565,17 @@ } }, "pretty-format": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.5.0.tgz", - "integrity": "sha512-/3RuSghukCf8Riu5Ncve0iI+BzVkbRU5EeUoArKARZobREycuH5O4waxvaNIloEXdb0qwgmEAed5vTpX1HNROQ==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz", + "integrity": "sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" } }, - "react-is": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.5.tgz", - "integrity": "sha512-sudt2uq5P/2TznPV4Wtdi+Lnq3yaYW8LfvPKLM9BKD8jJNBkxMVyB0C9/GmVhLw7Jbdmndk/73n7XQGeN9A3QQ==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -7602,14 +7588,14 @@ } }, "jest-message-util": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.5.0.tgz", - "integrity": "sha512-6ZYgdOojowCGiV0D8WdgctZEAe+EcFU+KrVds+0ZjvpZurUW2/oKJGltJ6FWY2joZwYXN5VL36GPV6pNVRqRnQ==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.7.1.tgz", + "integrity": "sha512-dk0gqVtyqezCHbcbk60CdIf+8UHgD+lmRHifeH3JRcnAqh4nEyPytSc9/L1+cQyxC+ceaeP696N4ATe7L+omcg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.5.0", - "@jest/types": "^24.5.0", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", "@types/stack-utils": "^1.0.1", "chalk": "^2.0.1", "micromatch": "^3.1.10", @@ -7932,12 +7918,12 @@ } }, "jest-mock": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.5.0.tgz", - "integrity": "sha512-ZnAtkWrKf48eERgAOiUxVoFavVBziO2pAi2MfZ1+bGXVkDfxWLxU0//oJBkgwbsv6OAmuLBz4XFFqvCFMqnGUw==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.7.0.tgz", + "integrity": "sha512-6taW4B4WUcEiT2V9BbOmwyGuwuAFT2G8yghF7nyNW1/2gq5+6aTqSPcS9lS6ArvEkX55vbPAS/Jarx5LSm4Fng==", "dev": true, "requires": { - "@jest/types": "^24.5.0" + "@jest/types": "^24.7.0" } }, "jest-pnp-resolver": { @@ -7953,12 +7939,12 @@ "dev": true }, "jest-resolve": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.5.0.tgz", - "integrity": "sha512-ZIfGqLX1Rg8xJpQqNjdoO8MuxHV1q/i2OO1hLXjgCWFWs5bsedS8UrOdgjUqqNae6DXA+pCyRmdcB7lQEEbXew==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.7.1.tgz", + "integrity": "sha512-Bgrc+/UUZpGJ4323sQyj85hV9d+ANyPNu6XfRDUcyFNX1QrZpSoM0kE4Mb2vZMAYTJZsBFzYe8X1UaOkOELSbw==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -7997,39 +7983,39 @@ } }, "jest-resolve-dependencies": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.5.0.tgz", - "integrity": "sha512-dRVM1D+gWrFfrq2vlL5P9P/i8kB4BOYqYf3S7xczZ+A6PC3SgXYSErX/ScW/469pWMboM1uAhgLF+39nXlirCQ==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.7.1.tgz", + "integrity": "sha512-2Eyh5LJB2liNzfk4eo7bD1ZyBbqEJIyyrFtZG555cSWW9xVHxII2NuOkSl1yUYTAYCAmM2f2aIT5A7HzNmubyg==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.5.0" + "jest-snapshot": "^24.7.1" } }, "jest-runner": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.5.0.tgz", - "integrity": "sha512-oqsiS9TkIZV5dVkD+GmbNfWBRPIvxqmlTQ+AQUJUQ07n+4xTSDc40r+aKBynHw9/tLzafC00DIbJjB2cOZdvMA==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.7.1.tgz", + "integrity": "sha512-aNFc9liWU/xt+G9pobdKZ4qTeG/wnJrJna3VqunziDNsWT3EBpmxXZRBMKCsNMyfy+A/XHiV+tsMLufdsNdgCw==", "dev": true, "requires": { - "@jest/console": "^24.3.0", - "@jest/environment": "^24.5.0", - "@jest/test-result": "^24.5.0", - "@jest/types": "^24.5.0", + "@jest/console": "^24.7.1", + "@jest/environment": "^24.7.1", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", "chalk": "^2.4.2", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-config": "^24.5.0", + "jest-config": "^24.7.1", "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.5.0", - "jest-jasmine2": "^24.5.0", - "jest-leak-detector": "^24.5.0", - "jest-message-util": "^24.5.0", - "jest-resolve": "^24.5.0", - "jest-runtime": "^24.5.0", - "jest-util": "^24.5.0", - "jest-worker": "^24.4.0", + "jest-haste-map": "^24.7.1", + "jest-jasmine2": "^24.7.1", + "jest-leak-detector": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-resolve": "^24.7.1", + "jest-runtime": "^24.7.1", + "jest-util": "^24.7.1", + "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" }, @@ -8055,12 +8041,11 @@ } }, "jest-worker": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.4.0.tgz", - "integrity": "sha512-BH9X/klG9vxwoO99ZBUbZFfV8qO0XNZ5SIiCyYK2zOuJBl6YJVAeNIQjcoOVNu4HGEHeYEKsUWws8kSlSbZ9YQ==", + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", + "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", "dev": true, "requires": { - "@types/node": "*", "merge-stream": "^1.0.1", "supports-color": "^6.1.0" }, @@ -8088,30 +8073,30 @@ } }, "jest-runtime": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.5.0.tgz", - "integrity": "sha512-GTFHzfLdwpaeoDPilNpBrorlPoNZuZrwKKzKJs09vWwHo+9TOsIIuszK8cWOuKC7ss07aN1922Ge8fsGdsqCuw==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.7.1.tgz", + "integrity": "sha512-0VAbyBy7tll3R+82IPJpf6QZkokzXPIS71aDeqh+WzPRXRCNz6StQ45otFariPdJ4FmXpDiArdhZrzNAC3sj6A==", "dev": true, "requires": { - "@jest/console": "^24.3.0", - "@jest/environment": "^24.5.0", + "@jest/console": "^24.7.1", + "@jest/environment": "^24.7.1", "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.5.0", - "@jest/types": "^24.5.0", + "@jest/transform": "^24.7.1", + "@jest/types": "^24.7.0", "@types/yargs": "^12.0.2", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.1.15", - "jest-config": "^24.5.0", - "jest-haste-map": "^24.5.0", - "jest-message-util": "^24.5.0", - "jest-mock": "^24.5.0", + "jest-config": "^24.7.1", + "jest-haste-map": "^24.7.1", + "jest-message-util": "^24.7.1", + "jest-mock": "^24.7.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.5.0", - "jest-snapshot": "^24.5.0", - "jest-util": "^24.5.0", - "jest-validate": "^24.5.0", + "jest-resolve": "^24.7.1", + "jest-snapshot": "^24.7.1", + "jest-util": "^24.7.1", + "jest-validate": "^24.7.0", "realpath-native": "^1.1.0", "slash": "^2.0.0", "strip-bom": "^3.0.0", @@ -8134,9 +8119,9 @@ } }, "camelcase": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", - "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "chalk": { @@ -8233,9 +8218,9 @@ } }, "mem": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz", - "integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", @@ -8244,9 +8229,9 @@ } }, "mimic-fn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz", - "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "os-locale": { @@ -8279,9 +8264,9 @@ } }, "p-try": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz", - "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "strip-ansi": { @@ -8340,22 +8325,22 @@ "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==" }, "jest-snapshot": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.5.0.tgz", - "integrity": "sha512-eBEeJb5ROk0NcpodmSKnCVgMOo+Qsu5z9EDl3tGffwPzK1yV37mjGWF2YeIz1NkntgTzP+fUL4s09a0+0dpVWA==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.7.1.tgz", + "integrity": "sha512-8Xk5O4p+JsZZn4RCNUS3pxA+ORKpEKepE+a5ejIKrId9CwrVN0NY+vkqEkXqlstA5NMBkNahXkR/4qEBy0t5yA==", "dev": true, "requires": { "@babel/types": "^7.0.0", - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "chalk": "^2.0.1", - "expect": "^24.5.0", - "jest-diff": "^24.5.0", - "jest-matcher-utils": "^24.5.0", - "jest-message-util": "^24.5.0", - "jest-resolve": "^24.5.0", + "expect": "^24.7.1", + "jest-diff": "^24.7.0", + "jest-matcher-utils": "^24.7.0", + "jest-message-util": "^24.7.1", + "jest-resolve": "^24.7.1", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^24.5.0", + "pretty-format": "^24.7.0", "semver": "^5.5.0" }, "dependencies": { @@ -8386,23 +8371,17 @@ } }, "pretty-format": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.5.0.tgz", - "integrity": "sha512-/3RuSghukCf8Riu5Ncve0iI+BzVkbRU5EeUoArKARZobREycuH5O4waxvaNIloEXdb0qwgmEAed5vTpX1HNROQ==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz", + "integrity": "sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" } }, - "react-is": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.5.tgz", - "integrity": "sha512-sudt2uq5P/2TznPV4Wtdi+Lnq3yaYW8LfvPKLM9BKD8jJNBkxMVyB0C9/GmVhLw7Jbdmndk/73n7XQGeN9A3QQ==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -8415,17 +8394,16 @@ } }, "jest-util": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.5.0.tgz", - "integrity": "sha512-Xy8JsD0jvBz85K7VsTIQDuY44s+hYJyppAhcsHsOsGisVtdhar6fajf2UOf2mEVEgh15ZSdA0zkCuheN8cbr1Q==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.7.1.tgz", + "integrity": "sha512-/KilOue2n2rZ5AnEBYoxOXkeTu6vi7cjgQ8MXEkih0oeAXT6JkS3fr7/j8+engCjciOU1Nq5loMSKe0A1oeX0A==", "dev": true, "requires": { - "@jest/console": "^24.3.0", - "@jest/fake-timers": "^24.5.0", + "@jest/console": "^24.7.1", + "@jest/fake-timers": "^24.7.1", "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.5.0", - "@jest/types": "^24.5.0", - "@types/node": "*", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", "callsites": "^3.0.0", "chalk": "^2.0.1", "graceful-fs": "^4.1.15", @@ -8479,17 +8457,17 @@ } }, "jest-validate": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.5.0.tgz", - "integrity": "sha512-gg0dYszxjgK2o11unSIJhkOFZqNRQbWOAB2/LOUdsd2LfD9oXiMeuee8XsT0iRy5EvSccBgB4h/9HRbIo3MHgQ==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.7.0.tgz", + "integrity": "sha512-cgai/gts9B2chz1rqVdmLhzYxQbgQurh1PEQSvSgPZ8KGa1AqXsqC45W5wKEwzxKrWqypuQrQxnF4+G9VejJJA==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "camelcase": "^5.0.0", "chalk": "^2.0.1", "jest-get-type": "^24.3.0", "leven": "^2.1.0", - "pretty-format": "^24.5.0" + "pretty-format": "^24.7.0" }, "dependencies": { "ansi-regex": { @@ -8508,9 +8486,9 @@ } }, "camelcase": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz", - "integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "chalk": { @@ -8525,23 +8503,17 @@ } }, "pretty-format": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.5.0.tgz", - "integrity": "sha512-/3RuSghukCf8Riu5Ncve0iI+BzVkbRU5EeUoArKARZobREycuH5O4waxvaNIloEXdb0qwgmEAed5vTpX1HNROQ==", + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.7.0.tgz", + "integrity": "sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA==", "dev": true, "requires": { - "@jest/types": "^24.5.0", + "@jest/types": "^24.7.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" } }, - "react-is": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.5.tgz", - "integrity": "sha512-sudt2uq5P/2TznPV4Wtdi+Lnq3yaYW8LfvPKLM9BKD8jJNBkxMVyB0C9/GmVhLw7Jbdmndk/73n7XQGeN9A3QQ==", - "dev": true - }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -8554,18 +8526,17 @@ } }, "jest-watcher": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.5.0.tgz", - "integrity": "sha512-/hCpgR6bg0nKvD3nv4KasdTxuhwfViVMHUATJlnGCD0r1QrmIssimPbmc5KfAQblAVxkD8xrzuij9vfPUk1/rA==", + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.7.1.tgz", + "integrity": "sha512-Wd6TepHLRHVKLNPacEsBwlp9raeBIO+01xrN24Dek4ggTS8HHnOzYSFnvp+6MtkkJ3KfMzy220KTi95e2rRkrw==", "dev": true, "requires": { - "@jest/test-result": "^24.5.0", - "@jest/types": "^24.5.0", - "@types/node": "*", + "@jest/test-result": "^24.7.1", + "@jest/types": "^24.7.0", "@types/yargs": "^12.0.9", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", - "jest-util": "^24.5.0", + "jest-util": "^24.7.1", "string-length": "^2.0.0" }, "dependencies": { @@ -8928,7 +8899,6 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, "requires": { "p-defer": "^1.0.0" } @@ -9684,9 +9654,9 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwsapi": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.1.tgz", - "integrity": "sha512-T5GaA1J/d34AC8mkrFD2O0DR17kwJ702ZOtJOsS8RpbsQZVOC2/xYFb1i/cw+xdM54JIlMuojjDOYct8GIWtwg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.3.tgz", + "integrity": "sha512-RowAaJGEgYXEZfQ7tvvdtAQUKPyTR6T6wNu0fwlNsGQYr/h3yQc6oI8WnVZh3Y/Sylwc+dtAlvPqfFZjhTyk3A==", "dev": true }, "oauth-sign": { @@ -9884,8 +9854,7 @@ "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" }, "p-each-series": { "version": "1.0.0", @@ -9904,8 +9873,7 @@ "p-is-promise": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", - "dev": true + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==" }, "p-limit": { "version": "1.3.0", @@ -10277,11 +10245,12 @@ "dev": true }, "query-string": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.4.0.tgz", - "integrity": "sha512-Werid2I41/tJTqOGPJ3cC3vwrIh/8ZupBQbp7BSsqXzr+pTin3aMJ/EZb8UEuk7ZO3VqQFvq2qck/ihc6wqIdw==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.4.2.tgz", + "integrity": "sha512-DfJqAen17LfLA3rQ+H5S4uXphrF+ANU1lT2ijds4V/Tj4gZxA3gx5/tg1bz7kYCmwna7LyJNCYqO7jNRzo3aLw==", "requires": { "decode-uri-component": "^0.2.0", + "split-on-first": "^1.0.0", "strict-uri-encode": "^2.0.0" } }, @@ -10541,6 +10510,11 @@ } } }, + "react-native-actionsheet": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/react-native-actionsheet/-/react-native-actionsheet-2.4.2.tgz", + "integrity": "sha512-DBoWIvVwuWXuptF4t46pBqkFxaUxS+rsIdHiA05t0n4BdTIDV2R4s9bLEUVOGzb94D7VxIamsXZPA/3mmw+SXg==" + }, "react-native-background-timer": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/react-native-background-timer/-/react-native-background-timer-2.1.1.tgz", @@ -10565,6 +10539,11 @@ "prop-types": "^15.5.8" } }, + "react-native-extra-dimensions-android": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/react-native-extra-dimensions-android/-/react-native-extra-dimensions-android-1.2.5.tgz", + "integrity": "sha512-eorFo9X1vEqAWUkgcZ300yKBG1wtgNeE7tdWAH2CE+P50FGTniJg5Sr6l1iPWG8ZskQOuF+KeiSTFlDa4vLfMw==" + }, "react-native-geolocation-service": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/react-native-geolocation-service/-/react-native-geolocation-service-2.0.0.tgz", @@ -10581,9 +10560,9 @@ } }, "react-native-image-picker": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-0.28.0.tgz", - "integrity": "sha512-lQfdOyC1mQ/pvfEaUGdoodO1A1clg9kf6YC1WdbWhA6XK+joBd9GQYf8SaCf6/7vM25U4ib+6ux4yvnrS1pOqQ==" + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/react-native-image-picker/-/react-native-image-picker-0.28.1.tgz", + "integrity": "sha512-CW2dm+cjsdW2fjBW2WD/cSufNG0x0UpljwGHrjSzyB0TckoW+tjYv44UWtckCWxr1JtCg+QrYDO/MzlRyFcjwQ==" }, "react-native-maps": { "version": "0.23.0", @@ -10621,13 +10600,13 @@ } }, "react-native-vector-icons": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-5.0.0.tgz", - "integrity": "sha512-3ZmLGhQFk5QeHuttx0tOpghXhpVMGwXzb3pVaW/M8Qj0qkcg7koVyZmoR9vABQuxFC6KbM3l6/WLYZPh2aGfuQ==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-6.4.2.tgz", + "integrity": "sha512-G7Y5HksOQkCanFWKJ+fjwP38XL8tQREOSnw7jrbq28AFrrv41YtafOF4uDSDS7HxMRXs17HeEzn24OzJb63iuA==", "requires": { "lodash": "^4.0.0", - "prop-types": "^15.5.10", - "yargs": "^8.0.2" + "prop-types": "^15.6.2", + "yargs": "^13.2.2" } }, "react-native-view-shot": { @@ -10636,23 +10615,23 @@ "integrity": "sha512-xFJA+N7wh8Ik/17I4QB24e0a0L3atg1ScVehvtYR5UBTgHdzTFA0ZylvXp9gkZt7V+AT5Pni0H3NQItpqSKFoQ==" }, "react-native-webview": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-5.4.3.tgz", - "integrity": "sha512-l3Py5+S26fyaBPy/Gm5zpdrdDLz7l1TzjrgyDTnKiH2J94MkQfIJEzN7h05DCcDgszXR7WMQaba/0+WR1rv74g==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-5.6.2.tgz", + "integrity": "sha512-VSn3dMm/OpZH30AgoQ5IQZSgH3//1dCOrTC+63rmHQL3bhggMvk6C+OWen/YL2w3FCw0R0Z+PFs/uccCQI+aEw==", "requires": { "escape-string-regexp": "1.0.5", "invariant": "2.2.4" } }, "react-navigation": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-3.5.1.tgz", - "integrity": "sha512-uyKCvk8BaNhpVfjclIbr+lnAbHCPhpvo/RlgigvCJwAtzWZXTgX73PfDxX5n2wCGzhKayzN+MByByXobwTL06g==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-3.6.1.tgz", + "integrity": "sha512-8G/GcvBFMmqLGh9J2PpO/no13op2TOsUP8+6HIHVbccNwFGqM5AwvAczfpXYJpfEnjFTA6/VtRGcFX2bGk0zmQ==", "requires": { - "@react-navigation/core": "3.2.0", + "@react-navigation/core": "~3.2.1", "@react-navigation/native": "~3.3.0", "react-navigation-drawer": "1.3.0", - "react-navigation-stack": "1.1.1", + "react-navigation-stack": "1.2.0", "react-navigation-tabs": "1.0.2" } }, @@ -10665,9 +10644,9 @@ } }, "react-navigation-stack": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/react-navigation-stack/-/react-navigation-stack-1.1.1.tgz", - "integrity": "sha512-x7dpMHIlwMNHNUa91lUXtHoslbD+LcXT9EPagxQJH7JHVECxyo4iDLE1w9yABiJXuVDdNvBeVHYwLk3sjafbTA==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/react-navigation-stack/-/react-navigation-stack-1.2.0.tgz", + "integrity": "sha512-QVnFhCFZoY7wwYIHhmWDwd1JoUX8C858oX4FKwqmJetrkeQU7Oh32z0kBip+fs49v3pZfjPnNJwekeAidFsRlg==" }, "react-navigation-tabs": { "version": "1.0.2", @@ -10728,15 +10707,23 @@ } }, "react-test-renderer": { - "version": "16.8.5", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.8.5.tgz", - "integrity": "sha512-/pFpHYQH4f35OqOae/DgOCXJDxBqD3K3akVfDhLgR0qYHoHjnICI/XS9QDwIhbrOFHWL7okVW9kKMaHuKvt2ng==", + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.8.6.tgz", + "integrity": "sha512-H2srzU5IWYT6cZXof6AhUcx/wEyJddQ8l7cLM/F7gDXYyPr4oq+vCIxJYXVGhId1J706sqziAjuOEjyNkfgoEw==", "dev": true, "requires": { "object-assign": "^4.1.1", "prop-types": "^15.6.2", - "react-is": "^16.8.5", - "scheduler": "^0.13.5" + "react-is": "^16.8.6", + "scheduler": "^0.13.6" + }, + "dependencies": { + "react-is": { + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", + "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", + "dev": true + } } }, "react-transform-hmr": { @@ -11401,9 +11388,9 @@ "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, "scheduler": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.5.tgz", - "integrity": "sha512-K98vjkQX9OIt/riLhp6F+XtDPtMQhqNcf045vsh+pcuvHq+PHy1xCrH3pq1P40m6yR46lpVvVhKdEOtnimuUJw==", + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", + "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", "dev": true, "requires": { "loose-envify": "^1.1.0", @@ -11738,6 +11725,11 @@ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==" }, + "split-on-first": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.0.0.tgz", + "integrity": "sha512-mjA57TQtdWztVZ9THAjGNpgbuIrNfsNrGa5IyK94NoPaT4N14M+GI4jD7t4arLjFkYRQWdETC5RxFzLWouoB3A==" + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -11990,9 +11982,9 @@ } }, "p-try": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz", - "integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "parse-json": { @@ -12191,9 +12183,9 @@ "dev": true }, "tslint": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.14.0.tgz", - "integrity": "sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.15.0.tgz", + "integrity": "sha512-6bIEujKR21/3nyeoX2uBnE8s+tMXCQXhqMmaIPJpHmXJoBJPTLcI7/VHRtUwMhnLVdwLqqY3zmd8Dxqa5CVdJA==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", @@ -12202,7 +12194,7 @@ "commander": "^2.12.1", "diff": "^3.2.0", "glob": "^7.1.1", - "js-yaml": "^3.7.0", + "js-yaml": "^3.13.0", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "resolve": "^1.3.2", @@ -12351,9 +12343,9 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { - "version": "3.3.4000", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.4000.tgz", - "integrity": "sha512-jjOcCZvpkl2+z7JFn0yBOoLQyLoIkNZAs/fYJkUG6VKy6zLPHJGfQJYFHzibB6GJaF/8QrcECtlQ5cpvRHSMEA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.1.tgz", + "integrity": "sha512-3NSMb2VzDQm8oBTLH6Nj55VVtUEpe/rgkIzMir0qVoLyjDZlnMBva0U6vDiV3IH+sl/Yu6oP5QwsAQtHPmDd2Q==", "dev": true }, "typescript-compare": { @@ -12805,23 +12797,221 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", + "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", + "requires": { + "cliui": "^4.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yargs-parser": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } }, "yargs-parser": { diff --git a/package.json b/package.json index 010d1b69..9031b2be 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "WddClient", - "version": "0.3.2", + "version": "0.4.12", "private": true, "scripts": { "start": "node node_modules/react-native/local-cli/cli.js start", @@ -12,25 +12,28 @@ }, "dependencies": { "@JWWon/react-native-universal-pedometer": "github:JWWon/react-native-universal-pedometer", - "aws-amplify": "^1.1.22", - "aws-amplify-react-native": "^2.1.8", + "aws-amplify": "^1.1.24", + "aws-amplify-react-native": "^2.1.9", "axios": "^0.18.0", "hangul-js": "^0.2.5", - "immer": "^2.1.4", + "immer": "^2.1.5", "lodash": "^4.17.11", "moment": "^2.24.0", "react": "16.8.3", "react-native": "^0.59.2", + "react-native-actionsheet": "^2.4.2", "react-native-background-timer": "^2.1.1", "react-native-datepicker": "^1.7.2", + "react-native-extra-dimensions-android": "^1.2.5", "react-native-geolocation-service": "^2.0.0", "react-native-gesture-handler": "^1.1.0", - "react-native-image-picker": "^0.28.0", + "react-native-image-picker": "^0.28.1", "react-native-maps": "^0.23.0", "react-native-snap-carousel": "^3.7.5", + "react-native-vector-icons": "^6.4.2", "react-native-view-shot": "^2.5.0", - "react-native-webview": "^5.4.3", - "react-navigation": "^3.5.1", + "react-native-webview": "^5.6.2", + "react-navigation": "^3.6.1", "react-redux": "^6.0.1", "redux": "^4.0.1", "redux-actions": "^2.6.5", @@ -39,25 +42,25 @@ "devDependencies": { "@types/jest": "^24.0.11", "@types/lodash": "^4.14.123", - "@types/node": "^11.11.7", + "@types/node": "^11.13.0", "@types/react": "^16.8.8", "@types/react-native": "^0.57.41", "@types/react-native-background-timer": "^2.0.0", "@types/react-native-datepicker": "^1.7.0", "@types/react-native-snap-carousel": "^3.7.1", - "@types/react-navigation": "^3.0.5", - "@types/react-redux": "^7.0.5", + "@types/react-navigation": "^3.0.6", + "@types/react-redux": "^7.0.6", "@types/react-test-renderer": "^16.8.1", "@types/redux-actions": "^2.6.0", - "babel-jest": "^24.5.0", + "babel-jest": "^24.7.1", "babel-plugin-module-resolver": "^3.2.0", - "jest": "^24.5.0", + "jest": "^24.7.1", "metro-react-native-babel-preset": "^0.53.1", - "react-test-renderer": "^16.8.5", + "react-test-renderer": "^16.8.6", "redux-devtools-extension": "^2.13.7", - "tslint": "^5.14.0", + "tslint": "^5.15.0", "tslint-config-airbnb": "^5.11.1", - "typescript": "^3.3.4000" + "typescript": "^3.4.1" }, "jest": { "preset": "react-native" diff --git a/src/assets/badges/badge_10km_off.png b/src/assets/badges/badge_10km_off.png new file mode 100644 index 00000000..719cf6d6 Binary files /dev/null and b/src/assets/badges/badge_10km_off.png differ diff --git a/src/assets/badges/badge_10km_off@2x.png b/src/assets/badges/badge_10km_off@2x.png new file mode 100644 index 00000000..b321702c Binary files /dev/null and b/src/assets/badges/badge_10km_off@2x.png differ diff --git a/src/assets/badges/badge_10km_on.png b/src/assets/badges/badge_10km_on.png new file mode 100644 index 00000000..dcb6f3cf Binary files /dev/null and b/src/assets/badges/badge_10km_on.png differ diff --git a/src/assets/badges/badge_10km_on@2x.png b/src/assets/badges/badge_10km_on@2x.png new file mode 100644 index 00000000..1df957b9 Binary files /dev/null and b/src/assets/badges/badge_10km_on@2x.png differ diff --git a/src/assets/badges/badge_1km_off.png b/src/assets/badges/badge_1km_off.png new file mode 100644 index 00000000..bb014383 Binary files /dev/null and b/src/assets/badges/badge_1km_off.png differ diff --git a/src/assets/badges/badge_1km_off@2x.png b/src/assets/badges/badge_1km_off@2x.png new file mode 100644 index 00000000..314b1d5d Binary files /dev/null and b/src/assets/badges/badge_1km_off@2x.png differ diff --git a/src/assets/badges/badge_1km_on.png b/src/assets/badges/badge_1km_on.png new file mode 100644 index 00000000..8b59e635 Binary files /dev/null and b/src/assets/badges/badge_1km_on.png differ diff --git a/src/assets/badges/badge_1km_on@2x.png b/src/assets/badges/badge_1km_on@2x.png new file mode 100644 index 00000000..5dc0688a Binary files /dev/null and b/src/assets/badges/badge_1km_on@2x.png differ diff --git a/src/assets/badges/badge_3km_off.png b/src/assets/badges/badge_3km_off.png new file mode 100644 index 00000000..6e16703b Binary files /dev/null and b/src/assets/badges/badge_3km_off.png differ diff --git a/src/assets/badges/badge_3km_off@2x.png b/src/assets/badges/badge_3km_off@2x.png new file mode 100644 index 00000000..9f23263f Binary files /dev/null and b/src/assets/badges/badge_3km_off@2x.png differ diff --git a/src/assets/badges/badge_3km_on.png b/src/assets/badges/badge_3km_on.png new file mode 100644 index 00000000..b64967a1 Binary files /dev/null and b/src/assets/badges/badge_3km_on.png differ diff --git a/src/assets/badges/badge_3km_on@2x.png b/src/assets/badges/badge_3km_on@2x.png new file mode 100644 index 00000000..3d74abcf Binary files /dev/null and b/src/assets/badges/badge_3km_on@2x.png differ diff --git a/src/assets/badges/badge_5km_off.png b/src/assets/badges/badge_5km_off.png new file mode 100644 index 00000000..f72eab29 Binary files /dev/null and b/src/assets/badges/badge_5km_off.png differ diff --git a/src/assets/badges/badge_5km_off@2x.png b/src/assets/badges/badge_5km_off@2x.png new file mode 100644 index 00000000..37bd570e Binary files /dev/null and b/src/assets/badges/badge_5km_off@2x.png differ diff --git a/src/assets/badges/badge_5km_on.png b/src/assets/badges/badge_5km_on.png new file mode 100644 index 00000000..686f9c67 Binary files /dev/null and b/src/assets/badges/badge_5km_on.png differ diff --git a/src/assets/badges/badge_5km_on@2x.png b/src/assets/badges/badge_5km_on@2x.png new file mode 100644 index 00000000..913665d7 Binary files /dev/null and b/src/assets/badges/badge_5km_on@2x.png differ diff --git a/src/assets/badges/badge_first_like_off.png b/src/assets/badges/badge_first_like_off.png new file mode 100644 index 00000000..f92cea25 Binary files /dev/null and b/src/assets/badges/badge_first_like_off.png differ diff --git a/src/assets/badges/badge_first_like_off@2x.png b/src/assets/badges/badge_first_like_off@2x.png new file mode 100644 index 00000000..58ed1862 Binary files /dev/null and b/src/assets/badges/badge_first_like_off@2x.png differ diff --git a/src/assets/badges/badge_first_like_on.png b/src/assets/badges/badge_first_like_on.png new file mode 100644 index 00000000..15d8e734 Binary files /dev/null and b/src/assets/badges/badge_first_like_on.png differ diff --git a/src/assets/badges/badge_first_like_on@2x.png b/src/assets/badges/badge_first_like_on@2x.png new file mode 100644 index 00000000..4d5384c0 Binary files /dev/null and b/src/assets/badges/badge_first_like_on@2x.png differ diff --git a/src/assets/badges/badge_first_pee_off.png b/src/assets/badges/badge_first_pee_off.png new file mode 100644 index 00000000..64c8faf6 Binary files /dev/null and b/src/assets/badges/badge_first_pee_off.png differ diff --git a/src/assets/badges/badge_first_pee_off@2x.png b/src/assets/badges/badge_first_pee_off@2x.png new file mode 100644 index 00000000..ede7ba49 Binary files /dev/null and b/src/assets/badges/badge_first_pee_off@2x.png differ diff --git a/src/assets/badges/badge_first_pee_on.png b/src/assets/badges/badge_first_pee_on.png new file mode 100644 index 00000000..20140138 Binary files /dev/null and b/src/assets/badges/badge_first_pee_on.png differ diff --git a/src/assets/badges/badge_first_pee_on@2x.png b/src/assets/badges/badge_first_pee_on@2x.png new file mode 100644 index 00000000..66102172 Binary files /dev/null and b/src/assets/badges/badge_first_pee_on@2x.png differ diff --git a/src/assets/badges/badge_first_poo_off.png b/src/assets/badges/badge_first_poo_off.png new file mode 100644 index 00000000..17ade46c Binary files /dev/null and b/src/assets/badges/badge_first_poo_off.png differ diff --git a/src/assets/badges/badge_first_poo_off@2x.png b/src/assets/badges/badge_first_poo_off@2x.png new file mode 100644 index 00000000..95441a08 Binary files /dev/null and b/src/assets/badges/badge_first_poo_off@2x.png differ diff --git a/src/assets/badges/badge_first_poo_on.png b/src/assets/badges/badge_first_poo_on.png new file mode 100644 index 00000000..de768a23 Binary files /dev/null and b/src/assets/badges/badge_first_poo_on.png differ diff --git a/src/assets/badges/badge_first_poo_on@2x.png b/src/assets/badges/badge_first_poo_on@2x.png new file mode 100644 index 00000000..c9ba3c7a Binary files /dev/null and b/src/assets/badges/badge_first_poo_on@2x.png differ diff --git a/src/assets/badges/badge_first_profile_off.png b/src/assets/badges/badge_first_profile_off.png new file mode 100644 index 00000000..3ad90141 Binary files /dev/null and b/src/assets/badges/badge_first_profile_off.png differ diff --git a/src/assets/badges/badge_first_profile_off@2x.png b/src/assets/badges/badge_first_profile_off@2x.png new file mode 100644 index 00000000..0d50dc74 Binary files /dev/null and b/src/assets/badges/badge_first_profile_off@2x.png differ diff --git a/src/assets/badges/badge_first_profile_on.png b/src/assets/badges/badge_first_profile_on.png new file mode 100644 index 00000000..b8768828 Binary files /dev/null and b/src/assets/badges/badge_first_profile_on.png differ diff --git a/src/assets/badges/badge_first_profile_on@2x.png b/src/assets/badges/badge_first_profile_on@2x.png new file mode 100644 index 00000000..79fed070 Binary files /dev/null and b/src/assets/badges/badge_first_profile_on@2x.png differ diff --git a/src/assets/badges/badge_scrap_10_off.png b/src/assets/badges/badge_scrap_10_off.png new file mode 100644 index 00000000..8f0b3694 Binary files /dev/null and b/src/assets/badges/badge_scrap_10_off.png differ diff --git a/src/assets/badges/badge_scrap_10_off10Off@2x.png b/src/assets/badges/badge_scrap_10_off10Off@2x.png new file mode 100644 index 00000000..bbc402ce Binary files /dev/null and b/src/assets/badges/badge_scrap_10_off10Off@2x.png differ diff --git a/src/assets/badges/badge_scrap_10_on.png b/src/assets/badges/badge_scrap_10_on.png new file mode 100644 index 00000000..7d8cc713 Binary files /dev/null and b/src/assets/badges/badge_scrap_10_on.png differ diff --git a/src/assets/badges/badge_scrap_10_on@2x.png b/src/assets/badges/badge_scrap_10_on@2x.png new file mode 100644 index 00000000..904409a6 Binary files /dev/null and b/src/assets/badges/badge_scrap_10_on@2x.png differ diff --git a/src/assets/badges/badge_scrap_1_off.png b/src/assets/badges/badge_scrap_1_off.png new file mode 100644 index 00000000..0059719d Binary files /dev/null and b/src/assets/badges/badge_scrap_1_off.png differ diff --git a/src/assets/badges/badge_scrap_1_off@2x.png b/src/assets/badges/badge_scrap_1_off@2x.png new file mode 100644 index 00000000..3171e8e6 Binary files /dev/null and b/src/assets/badges/badge_scrap_1_off@2x.png differ diff --git a/src/assets/badges/badge_scrap_1_on.png b/src/assets/badges/badge_scrap_1_on.png new file mode 100644 index 00000000..7abc7a4a Binary files /dev/null and b/src/assets/badges/badge_scrap_1_on.png differ diff --git a/src/assets/badges/badge_scrap_1_on@2x.png b/src/assets/badges/badge_scrap_1_on@2x.png new file mode 100644 index 00000000..3f70c2f9 Binary files /dev/null and b/src/assets/badges/badge_scrap_1_on@2x.png differ diff --git a/src/assets/badges/badge_scrap_3_off.png b/src/assets/badges/badge_scrap_3_off.png new file mode 100644 index 00000000..db5baedc Binary files /dev/null and b/src/assets/badges/badge_scrap_3_off.png differ diff --git a/src/assets/badges/badge_scrap_3_off@2x.png b/src/assets/badges/badge_scrap_3_off@2x.png new file mode 100644 index 00000000..b6cae1c1 Binary files /dev/null and b/src/assets/badges/badge_scrap_3_off@2x.png differ diff --git a/src/assets/badges/badge_scrap_3_on.png b/src/assets/badges/badge_scrap_3_on.png new file mode 100644 index 00000000..71b67f48 Binary files /dev/null and b/src/assets/badges/badge_scrap_3_on.png differ diff --git a/src/assets/badges/badge_scrap_3_on@2x.png b/src/assets/badges/badge_scrap_3_on@2x.png new file mode 100644 index 00000000..8b2f8a08 Binary files /dev/null and b/src/assets/badges/badge_scrap_3_on@2x.png differ diff --git a/src/assets/badges/badge_scrap_5_off.png b/src/assets/badges/badge_scrap_5_off.png new file mode 100644 index 00000000..0495b4b1 Binary files /dev/null and b/src/assets/badges/badge_scrap_5_off.png differ diff --git a/src/assets/badges/badge_scrap_5_off@2x.png b/src/assets/badges/badge_scrap_5_off@2x.png new file mode 100644 index 00000000..a2ece31b Binary files /dev/null and b/src/assets/badges/badge_scrap_5_off@2x.png differ diff --git a/src/assets/badges/badge_scrap_5_on.png b/src/assets/badges/badge_scrap_5_on.png new file mode 100644 index 00000000..e8939c0e Binary files /dev/null and b/src/assets/badges/badge_scrap_5_on.png differ diff --git a/src/assets/badges/badge_scrap_5_on@2x.png b/src/assets/badges/badge_scrap_5_on@2x.png new file mode 100644 index 00000000..4401e950 Binary files /dev/null and b/src/assets/badges/badge_scrap_5_on@2x.png differ diff --git a/src/assets/badges/badge_walk_10_off.png b/src/assets/badges/badge_walk_10_off.png new file mode 100644 index 00000000..360ae743 Binary files /dev/null and b/src/assets/badges/badge_walk_10_off.png differ diff --git a/src/assets/badges/badge_walk_10_off@2x.png b/src/assets/badges/badge_walk_10_off@2x.png new file mode 100644 index 00000000..b1b14aee Binary files /dev/null and b/src/assets/badges/badge_walk_10_off@2x.png differ diff --git a/src/assets/badges/badge_walk_10_on.png b/src/assets/badges/badge_walk_10_on.png new file mode 100644 index 00000000..5e59a956 Binary files /dev/null and b/src/assets/badges/badge_walk_10_on.png differ diff --git a/src/assets/badges/badge_walk_10_on@2x.png b/src/assets/badges/badge_walk_10_on@2x.png new file mode 100644 index 00000000..7c382675 Binary files /dev/null and b/src/assets/badges/badge_walk_10_on@2x.png differ diff --git a/src/assets/badges/badge_walk_1_off.png b/src/assets/badges/badge_walk_1_off.png new file mode 100644 index 00000000..19c32c02 Binary files /dev/null and b/src/assets/badges/badge_walk_1_off.png differ diff --git a/src/assets/badges/badge_walk_1_off@2x.png b/src/assets/badges/badge_walk_1_off@2x.png new file mode 100644 index 00000000..32875de0 Binary files /dev/null and b/src/assets/badges/badge_walk_1_off@2x.png differ diff --git a/src/assets/badges/badge_walk_1_on.png b/src/assets/badges/badge_walk_1_on.png new file mode 100644 index 00000000..11ec6cbc Binary files /dev/null and b/src/assets/badges/badge_walk_1_on.png differ diff --git a/src/assets/badges/badge_walk_1_on@2x.png b/src/assets/badges/badge_walk_1_on@2x.png new file mode 100644 index 00000000..804ae695 Binary files /dev/null and b/src/assets/badges/badge_walk_1_on@2x.png differ diff --git a/src/assets/badges/badge_walk_3_off.png b/src/assets/badges/badge_walk_3_off.png new file mode 100644 index 00000000..64ef82df Binary files /dev/null and b/src/assets/badges/badge_walk_3_off.png differ diff --git a/src/assets/badges/badge_walk_3_off@2x.png b/src/assets/badges/badge_walk_3_off@2x.png new file mode 100644 index 00000000..2f2ea08e Binary files /dev/null and b/src/assets/badges/badge_walk_3_off@2x.png differ diff --git a/src/assets/badges/badge_walk_3_on.png b/src/assets/badges/badge_walk_3_on.png new file mode 100644 index 00000000..ece511a8 Binary files /dev/null and b/src/assets/badges/badge_walk_3_on.png differ diff --git a/src/assets/badges/badge_walk_3_on@2x.png b/src/assets/badges/badge_walk_3_on@2x.png new file mode 100644 index 00000000..98b66ec9 Binary files /dev/null and b/src/assets/badges/badge_walk_3_on@2x.png differ diff --git a/src/assets/badges/badge_walk_5_off.png b/src/assets/badges/badge_walk_5_off.png new file mode 100644 index 00000000..7f593979 Binary files /dev/null and b/src/assets/badges/badge_walk_5_off.png differ diff --git a/src/assets/badges/badge_walk_5_off@2x.png b/src/assets/badges/badge_walk_5_off@2x.png new file mode 100644 index 00000000..98356567 Binary files /dev/null and b/src/assets/badges/badge_walk_5_off@2x.png differ diff --git a/src/assets/badges/badge_walk_5_on.png b/src/assets/badges/badge_walk_5_on.png new file mode 100644 index 00000000..dbea5a31 Binary files /dev/null and b/src/assets/badges/badge_walk_5_on.png differ diff --git a/src/assets/badges/badge_walk_5_on@2x.png b/src/assets/badges/badge_walk_5_on@2x.png new file mode 100644 index 00000000..0826e291 Binary files /dev/null and b/src/assets/badges/badge_walk_5_on@2x.png differ diff --git a/src/assets/functions/link.ts b/src/assets/functions/link.ts new file mode 100644 index 00000000..b1de8dd0 --- /dev/null +++ b/src/assets/functions/link.ts @@ -0,0 +1,41 @@ +import { Linking, Platform } from 'react-native'; + +const createError = (msg = '') => Promise.reject(new Error(msg)); + +const openLink = (url: string) => { + return Linking.canOpenURL(url).then(canOpen => { + if (!canOpen) { + return createError(`invalid URL provided: ${url}`); + } else { + return Linking.openURL(url).catch(err => Promise.reject(err)); + } + }); +}; + +export const call = (args: { number: string; prompt?: boolean }) => { + const settings = Object.assign({ prompt: true }, args); + if (!settings.number) { + return createError('no number provided'); + } + if (typeof settings.number !== 'string') { + return createError('number should be string'); + } + if (typeof settings.prompt !== 'boolean') { + return createError('prompt should be bool'); + } + + const url = `${ + Platform.OS === 'ios' && settings.prompt ? 'telprompt:' : 'tel:' + }${settings.number.replace(/-/g, '')}`; + + return openLink(url); +}; + +export const email = (args: { receiver: string; subject: string }) => { + const url = `mailto:${args.receiver}?subject=${args.subject}`; + return openLink(url); +}; + +export const web = (args: { link: string }) => { + return openLink(args.link); +}; diff --git a/src/assets/functions/print.ts b/src/assets/functions/print.ts index 9014a8be..dd97df99 100644 --- a/src/assets/functions/print.ts +++ b/src/assets/functions/print.ts @@ -1,2 +1,10 @@ -export const rangeWithUnit = (range: number) => - range < 1 ? `${Math.round(range * 1000)}m` : `${range.toFixed(2)}km`; +export const rangeWithUnit = (range: number, integer?: boolean) => + range < 1 + ? `${Math.round(range * 1000)}m` + : `${integer ? Math.floor(range) : range.toFixed(2)}km`; + +export const timeWithUnit = (seconds: number) => { + if (seconds < 60) return `${seconds}초`; + if (seconds < 3600) return `${Math.floor(seconds / 60)}분`; + return `${Math.floor(seconds / 3600)}시간`; +}; diff --git a/src/assets/functions/validate.ts b/src/assets/functions/validate.ts index 83bd4901..f84aa84d 100644 --- a/src/assets/functions/validate.ts +++ b/src/assets/functions/validate.ts @@ -1,3 +1,4 @@ +import { Permission, PermissionsAndroid, Platform } from 'react-native'; /* tslint:disable */ export const validateEmail = (email: string) => @@ -6,3 +7,35 @@ export const validateEmail = (email: string) => ); export const validatePassword = (password: string) => password.length > 7; + +export const LOCATION_PERMISSIONS = [ + 'ACCESS_FINE_LOCATION', + 'ACCESS_COARSE_LOCATION', +]; +export const PICTURE_PERMISSIONS = [ + 'CAMERA', + 'READ_EXTERNAL_STORAGE', + 'WRITE_EXTERNAL_STORAGE', +]; + +export const checkPermission = async (permissions: string[]) => { + if (Platform.OS === 'ios') return true; + if (Platform.Version < 23) return true; + // Check Permissions + const notGranted: Permission[] = []; + for (let i = 0; i < permissions.length - 1; i += 1) { + const PERMISSON = PermissionsAndroid.PERMISSIONS[permissions[i]]; + if (!(await PermissionsAndroid.check(PERMISSON))) { + notGranted.push(PERMISSON); + } + } + if (notGranted.length === 0) return true; + // Get Permissions + const responses = Object.values( + await PermissionsAndroid.requestMultiple(notGranted) + ); + for (let i = 0; i < responses.length - 1; i += 1) { + if (responses[i] !== PermissionsAndroid.RESULTS.GRANTED) return false; + } + return true; +}; diff --git a/src/assets/icons/ic_add.png b/src/assets/icons/ic_add.png new file mode 100644 index 00000000..ab725bdb Binary files /dev/null and b/src/assets/icons/ic_add.png differ diff --git a/src/assets/icons/ic_camera.png b/src/assets/icons/ic_camera.png new file mode 100644 index 00000000..d07fb0d5 Binary files /dev/null and b/src/assets/icons/ic_camera.png differ diff --git a/src/assets/icons/ic_camera@2x.png b/src/assets/icons/ic_camera@2x.png index 9cf88cd7..bfd9bdcb 100644 Binary files a/src/assets/icons/ic_camera@2x.png and b/src/assets/icons/ic_camera@2x.png differ diff --git a/src/assets/icons/ic_camera@3x.png b/src/assets/icons/ic_camera@3x.png index 68ef5101..aa23cd38 100644 Binary files a/src/assets/icons/ic_camera@3x.png and b/src/assets/icons/ic_camera@3x.png differ diff --git a/src/assets/icons/ic_check_filled_off@2x.png b/src/assets/icons/ic_check_filled_off@2x.png new file mode 100644 index 00000000..a6c29a66 Binary files /dev/null and b/src/assets/icons/ic_check_filled_off@2x.png differ diff --git a/src/assets/icons/ic_check_filled_off@3x.png b/src/assets/icons/ic_check_filled_off@3x.png new file mode 100644 index 00000000..852ee090 Binary files /dev/null and b/src/assets/icons/ic_check_filled_off@3x.png differ diff --git a/src/assets/icons/ic_check_off.png b/src/assets/icons/ic_check_off.png deleted file mode 100644 index b3d1f859..00000000 Binary files a/src/assets/icons/ic_check_off.png and /dev/null differ diff --git a/src/assets/icons/ic_check_on.png b/src/assets/icons/ic_check_on.png deleted file mode 100644 index fab89ab2..00000000 Binary files a/src/assets/icons/ic_check_on.png and /dev/null differ diff --git a/src/assets/icons/ic_close_filled.png b/src/assets/icons/ic_close_filled.png new file mode 100644 index 00000000..dbe34881 Binary files /dev/null and b/src/assets/icons/ic_close_filled.png differ diff --git a/src/assets/icons/ic_close_filled@2x.png b/src/assets/icons/ic_close_filled@2x.png new file mode 100644 index 00000000..d5fedc2d Binary files /dev/null and b/src/assets/icons/ic_close_filled@2x.png differ diff --git a/src/assets/icons/ic_close_filled@3x.png b/src/assets/icons/ic_close_filled@3x.png new file mode 100644 index 00000000..df88d832 Binary files /dev/null and b/src/assets/icons/ic_close_filled@3x.png differ diff --git a/src/assets/icons/ic_close_round.png b/src/assets/icons/ic_close_round.png new file mode 100644 index 00000000..3013fb7b Binary files /dev/null and b/src/assets/icons/ic_close_round.png differ diff --git a/src/assets/icons/ic_close_round@2x.png b/src/assets/icons/ic_close_round@2x.png new file mode 100644 index 00000000..6c78ae97 Binary files /dev/null and b/src/assets/icons/ic_close_round@2x.png differ diff --git a/src/assets/icons/ic_close_round@3x.png b/src/assets/icons/ic_close_round@3x.png new file mode 100644 index 00000000..a21773f2 Binary files /dev/null and b/src/assets/icons/ic_close_round@3x.png differ diff --git a/src/assets/icons/ic_distance_black.png b/src/assets/icons/ic_distance_black.png new file mode 100644 index 00000000..7983a762 Binary files /dev/null and b/src/assets/icons/ic_distance_black.png differ diff --git a/src/assets/icons/ic_distance_black@2x.png b/src/assets/icons/ic_distance_black@2x.png new file mode 100644 index 00000000..108a7086 Binary files /dev/null and b/src/assets/icons/ic_distance_black@2x.png differ diff --git a/src/assets/icons/ic_distance_black@3x.png b/src/assets/icons/ic_distance_black@3x.png new file mode 100644 index 00000000..6c5bd1a9 Binary files /dev/null and b/src/assets/icons/ic_distance_black@3x.png differ diff --git a/src/assets/icons/ic_dropdown_black@2x.png b/src/assets/icons/ic_dropdown_black@2x.png new file mode 100644 index 00000000..06289491 Binary files /dev/null and b/src/assets/icons/ic_dropdown_black@2x.png differ diff --git a/src/assets/icons/ic_dropdown_black@3x.png b/src/assets/icons/ic_dropdown_black@3x.png new file mode 100644 index 00000000..525cb590 Binary files /dev/null and b/src/assets/icons/ic_dropdown_black@3x.png differ diff --git a/src/assets/icons/ic_go.png b/src/assets/icons/ic_go.png new file mode 100644 index 00000000..e81ae8d1 Binary files /dev/null and b/src/assets/icons/ic_go.png differ diff --git a/src/assets/icons/ic_go@2x.png b/src/assets/icons/ic_go@2x.png new file mode 100644 index 00000000..d49922be Binary files /dev/null and b/src/assets/icons/ic_go@2x.png differ diff --git a/src/assets/icons/ic_go_black.png b/src/assets/icons/ic_go_black.png new file mode 100644 index 00000000..5a8f8ff5 Binary files /dev/null and b/src/assets/icons/ic_go_black.png differ diff --git a/src/assets/icons/ic_go_black@2x.png b/src/assets/icons/ic_go_black@2x.png new file mode 100644 index 00000000..6f32a058 Binary files /dev/null and b/src/assets/icons/ic_go_black@2x.png differ diff --git a/src/assets/icons/ic_go_black@3x.png b/src/assets/icons/ic_go_black@3x.png new file mode 100644 index 00000000..7148a549 Binary files /dev/null and b/src/assets/icons/ic_go_black@3x.png differ diff --git a/src/assets/icons/ic_go_white.png b/src/assets/icons/ic_go_white.png new file mode 100644 index 00000000..8d187f80 Binary files /dev/null and b/src/assets/icons/ic_go_white.png differ diff --git a/src/assets/icons/ic_go_white@2x.png b/src/assets/icons/ic_go_white@2x.png new file mode 100644 index 00000000..f74426ba Binary files /dev/null and b/src/assets/icons/ic_go_white@2x.png differ diff --git a/src/assets/icons/ic_go_white@3x.png b/src/assets/icons/ic_go_white@3x.png new file mode 100644 index 00000000..db02430a Binary files /dev/null and b/src/assets/icons/ic_go_white@3x.png differ diff --git a/src/assets/icons/ic_heart_off.png b/src/assets/icons/ic_heart_off.png new file mode 100644 index 00000000..72982585 Binary files /dev/null and b/src/assets/icons/ic_heart_off.png differ diff --git a/src/assets/icons/ic_heart_off@2x.png b/src/assets/icons/ic_heart_off@2x.png new file mode 100644 index 00000000..a59ac4e5 Binary files /dev/null and b/src/assets/icons/ic_heart_off@2x.png differ diff --git a/src/assets/icons/ic_heart_off@3x.png b/src/assets/icons/ic_heart_off@3x.png new file mode 100644 index 00000000..c08a264b Binary files /dev/null and b/src/assets/icons/ic_heart_off@3x.png differ diff --git a/src/assets/icons/ic_heart_on.png b/src/assets/icons/ic_heart_on.png new file mode 100644 index 00000000..893dc102 Binary files /dev/null and b/src/assets/icons/ic_heart_on.png differ diff --git a/src/assets/icons/ic_heart_on@2x.png b/src/assets/icons/ic_heart_on@2x.png new file mode 100644 index 00000000..cb3be01d Binary files /dev/null and b/src/assets/icons/ic_heart_on@2x.png differ diff --git a/src/assets/icons/ic_heart_on@3x.png b/src/assets/icons/ic_heart_on@3x.png new file mode 100644 index 00000000..89d5616c Binary files /dev/null and b/src/assets/icons/ic_heart_on@3x.png differ diff --git a/src/assets/icons/ic_heart_press.png b/src/assets/icons/ic_heart_press.png new file mode 100644 index 00000000..23c6aba2 Binary files /dev/null and b/src/assets/icons/ic_heart_press.png differ diff --git a/src/assets/icons/ic_heart_press@2x.png b/src/assets/icons/ic_heart_press@2x.png new file mode 100644 index 00000000..41802078 Binary files /dev/null and b/src/assets/icons/ic_heart_press@2x.png differ diff --git a/src/assets/icons/ic_heart_press@3x.png b/src/assets/icons/ic_heart_press@3x.png new file mode 100644 index 00000000..18a77330 Binary files /dev/null and b/src/assets/icons/ic_heart_press@3x.png differ diff --git a/src/assets/icons/ic_icon_default.png b/src/assets/icons/ic_icon_default.png new file mode 100644 index 00000000..44a1fa4b Binary files /dev/null and b/src/assets/icons/ic_icon_default.png differ diff --git a/src/assets/icons/ic_icon_default@2x.png b/src/assets/icons/ic_icon_default@2x.png new file mode 100644 index 00000000..66915083 Binary files /dev/null and b/src/assets/icons/ic_icon_default@2x.png differ diff --git a/src/assets/icons/ic_icon_default@3x.png b/src/assets/icons/ic_icon_default@3x.png new file mode 100644 index 00000000..badb3539 Binary files /dev/null and b/src/assets/icons/ic_icon_default@3x.png differ diff --git a/src/assets/icons/ic_km.png b/src/assets/icons/ic_km.png new file mode 100644 index 00000000..2ed40127 Binary files /dev/null and b/src/assets/icons/ic_km.png differ diff --git a/src/assets/icons/ic_km@2x.png b/src/assets/icons/ic_km@2x.png new file mode 100644 index 00000000..e874bab2 Binary files /dev/null and b/src/assets/icons/ic_km@2x.png differ diff --git a/src/assets/icons/ic_km@3x.png b/src/assets/icons/ic_km@3x.png new file mode 100644 index 00000000..6d523414 Binary files /dev/null and b/src/assets/icons/ic_km@3x.png differ diff --git a/src/assets/icons/ic_loading.png b/src/assets/icons/ic_loading.png new file mode 100644 index 00000000..760d1376 Binary files /dev/null and b/src/assets/icons/ic_loading.png differ diff --git a/src/assets/icons/ic_loading@2x.png b/src/assets/icons/ic_loading@2x.png new file mode 100644 index 00000000..8623d4c9 Binary files /dev/null and b/src/assets/icons/ic_loading@2x.png differ diff --git a/src/assets/icons/ic_loading@3x.png b/src/assets/icons/ic_loading@3x.png new file mode 100644 index 00000000..2a718b12 Binary files /dev/null and b/src/assets/icons/ic_loading@3x.png differ diff --git a/src/assets/icons/ic_location_off.png b/src/assets/icons/ic_location_off.png new file mode 100644 index 00000000..d785f4e0 Binary files /dev/null and b/src/assets/icons/ic_location_off.png differ diff --git a/src/assets/icons/ic_location_off@2x.png b/src/assets/icons/ic_location_off@2x.png new file mode 100644 index 00000000..06693028 Binary files /dev/null and b/src/assets/icons/ic_location_off@2x.png differ diff --git a/src/assets/icons/ic_location_off@3x.png b/src/assets/icons/ic_location_off@3x.png new file mode 100644 index 00000000..3f19e9dd Binary files /dev/null and b/src/assets/icons/ic_location_off@3x.png differ diff --git a/src/assets/icons/ic_location.png b/src/assets/icons/ic_location_on.png similarity index 100% rename from src/assets/icons/ic_location.png rename to src/assets/icons/ic_location_on.png diff --git a/src/assets/icons/ic_location@2x.png b/src/assets/icons/ic_location_on@2x.png similarity index 100% rename from src/assets/icons/ic_location@2x.png rename to src/assets/icons/ic_location_on@2x.png diff --git a/src/assets/icons/ic_location@3x.png b/src/assets/icons/ic_location_on@3x.png similarity index 100% rename from src/assets/icons/ic_location@3x.png rename to src/assets/icons/ic_location_on@3x.png diff --git a/src/assets/icons/ic_map.png b/src/assets/icons/ic_map.png new file mode 100644 index 00000000..c0f50cfd Binary files /dev/null and b/src/assets/icons/ic_map.png differ diff --git a/src/assets/icons/ic_map@2x.png b/src/assets/icons/ic_map@2x.png index a8f24632..c298c147 100644 Binary files a/src/assets/icons/ic_map@2x.png and b/src/assets/icons/ic_map@2x.png differ diff --git a/src/assets/icons/ic_map@3x.png b/src/assets/icons/ic_map@3x.png index 7837b793..a4f3e59c 100644 Binary files a/src/assets/icons/ic_map@3x.png and b/src/assets/icons/ic_map@3x.png differ diff --git a/src/assets/icons/ic_map_page@2x.png b/src/assets/icons/ic_map_page@2x.png new file mode 100644 index 00000000..3dc18dc1 Binary files /dev/null and b/src/assets/icons/ic_map_page@2x.png differ diff --git a/src/assets/icons/ic_map_page@3x.png b/src/assets/icons/ic_map_page@3x.png new file mode 100644 index 00000000..f7a3564c Binary files /dev/null and b/src/assets/icons/ic_map_page@3x.png differ diff --git a/src/assets/icons/ic_num_1.png b/src/assets/icons/ic_num_1.png new file mode 100644 index 00000000..8cc26432 Binary files /dev/null and b/src/assets/icons/ic_num_1.png differ diff --git a/src/assets/icons/ic_num_1@2x.png b/src/assets/icons/ic_num_1@2x.png new file mode 100644 index 00000000..ac4b582a Binary files /dev/null and b/src/assets/icons/ic_num_1@2x.png differ diff --git a/src/assets/icons/ic_num_2.png b/src/assets/icons/ic_num_2.png new file mode 100644 index 00000000..67e8f58a Binary files /dev/null and b/src/assets/icons/ic_num_2.png differ diff --git a/src/assets/icons/ic_num_2@2x.png b/src/assets/icons/ic_num_2@2x.png new file mode 100644 index 00000000..d8c2a886 Binary files /dev/null and b/src/assets/icons/ic_num_2@2x.png differ diff --git a/src/assets/icons/ic_num_3.png b/src/assets/icons/ic_num_3.png new file mode 100644 index 00000000..e051769a Binary files /dev/null and b/src/assets/icons/ic_num_3.png differ diff --git a/src/assets/icons/ic_num_3@2x.png b/src/assets/icons/ic_num_3@2x.png new file mode 100644 index 00000000..5a15e4f6 Binary files /dev/null and b/src/assets/icons/ic_num_3@2x.png differ diff --git a/src/assets/icons/ic_pee.png b/src/assets/icons/ic_pee.png index b6c960e5..1a344bad 100644 Binary files a/src/assets/icons/ic_pee.png and b/src/assets/icons/ic_pee.png differ diff --git a/src/assets/icons/ic_pee@2x.png b/src/assets/icons/ic_pee@2x.png index 38828ce0..3c1cb8f4 100644 Binary files a/src/assets/icons/ic_pee@2x.png and b/src/assets/icons/ic_pee@2x.png differ diff --git a/src/assets/icons/ic_pee@3x.png b/src/assets/icons/ic_pee@3x.png index 1d21d57d..069540f5 100644 Binary files a/src/assets/icons/ic_pee@3x.png and b/src/assets/icons/ic_pee@3x.png differ diff --git a/src/assets/icons/ic_pee_black.png b/src/assets/icons/ic_pee_black.png new file mode 100644 index 00000000..3ed4411e Binary files /dev/null and b/src/assets/icons/ic_pee_black.png differ diff --git a/src/assets/icons/ic_pee_black@2x.png b/src/assets/icons/ic_pee_black@2x.png new file mode 100644 index 00000000..2740c8df Binary files /dev/null and b/src/assets/icons/ic_pee_black@2x.png differ diff --git a/src/assets/icons/ic_pee_black@3x.png b/src/assets/icons/ic_pee_black@3x.png new file mode 100644 index 00000000..fd5d3b1c Binary files /dev/null and b/src/assets/icons/ic_pee_black@3x.png differ diff --git a/src/assets/icons/ic_pee_white.png b/src/assets/icons/ic_pee_white.png new file mode 100644 index 00000000..d4861850 Binary files /dev/null and b/src/assets/icons/ic_pee_white.png differ diff --git a/src/assets/icons/ic_pee_white@2x.png b/src/assets/icons/ic_pee_white@2x.png new file mode 100644 index 00000000..d9af799b Binary files /dev/null and b/src/assets/icons/ic_pee_white@2x.png differ diff --git a/src/assets/icons/ic_pee_white@3x.png b/src/assets/icons/ic_pee_white@3x.png new file mode 100644 index 00000000..b66b5335 Binary files /dev/null and b/src/assets/icons/ic_pee_white@3x.png differ diff --git a/src/assets/icons/ic_pin.png b/src/assets/icons/ic_pin.png deleted file mode 100644 index 60368b03..00000000 Binary files a/src/assets/icons/ic_pin.png and /dev/null differ diff --git a/src/assets/icons/ic_pin@2x.png b/src/assets/icons/ic_pin@2x.png deleted file mode 100644 index d542438f..00000000 Binary files a/src/assets/icons/ic_pin@2x.png and /dev/null differ diff --git a/src/assets/icons/ic_pin@3x.png b/src/assets/icons/ic_pin@3x.png deleted file mode 100644 index d371573c..00000000 Binary files a/src/assets/icons/ic_pin@3x.png and /dev/null differ diff --git a/src/assets/icons/ic_place_default.png b/src/assets/icons/ic_place_default.png deleted file mode 100644 index 9631e9b4..00000000 Binary files a/src/assets/icons/ic_place_default.png and /dev/null differ diff --git a/src/assets/icons/ic_place_default@2x.png b/src/assets/icons/ic_place_default@2x.png deleted file mode 100644 index be06f66b..00000000 Binary files a/src/assets/icons/ic_place_default@2x.png and /dev/null differ diff --git a/src/assets/icons/ic_place_default@3x.png b/src/assets/icons/ic_place_default@3x.png deleted file mode 100644 index 0dffd5a4..00000000 Binary files a/src/assets/icons/ic_place_default@3x.png and /dev/null differ diff --git a/src/assets/icons/ic_place_off.png b/src/assets/icons/ic_place_off.png new file mode 100644 index 00000000..9429899e Binary files /dev/null and b/src/assets/icons/ic_place_off.png differ diff --git a/src/assets/icons/ic_place_off@2x.png b/src/assets/icons/ic_place_off@2x.png new file mode 100644 index 00000000..522ac9eb Binary files /dev/null and b/src/assets/icons/ic_place_off@2x.png differ diff --git a/src/assets/icons/ic_place_off@3x.png b/src/assets/icons/ic_place_off@3x.png new file mode 100644 index 00000000..0772a82c Binary files /dev/null and b/src/assets/icons/ic_place_off@3x.png differ diff --git a/src/assets/icons/ic_place.png b/src/assets/icons/ic_place_on.png similarity index 100% rename from src/assets/icons/ic_place.png rename to src/assets/icons/ic_place_on.png diff --git a/src/assets/icons/ic_place@2x.png b/src/assets/icons/ic_place_on@2x.png similarity index 100% rename from src/assets/icons/ic_place@2x.png rename to src/assets/icons/ic_place_on@2x.png diff --git a/src/assets/icons/ic_place@3x.png b/src/assets/icons/ic_place_on@3x.png similarity index 100% rename from src/assets/icons/ic_place@3x.png rename to src/assets/icons/ic_place_on@3x.png diff --git a/src/assets/icons/ic_poo.png b/src/assets/icons/ic_poo.png index 63913c5c..efd77771 100644 Binary files a/src/assets/icons/ic_poo.png and b/src/assets/icons/ic_poo.png differ diff --git a/src/assets/icons/ic_poo@2x.png b/src/assets/icons/ic_poo@2x.png index af1968a6..90c9a9a3 100644 Binary files a/src/assets/icons/ic_poo@2x.png and b/src/assets/icons/ic_poo@2x.png differ diff --git a/src/assets/icons/ic_poo@3x.png b/src/assets/icons/ic_poo@3x.png index 5e8580a6..35df7405 100644 Binary files a/src/assets/icons/ic_poo@3x.png and b/src/assets/icons/ic_poo@3x.png differ diff --git a/src/assets/icons/ic_poo_black.png b/src/assets/icons/ic_poo_black.png new file mode 100644 index 00000000..b46e05ff Binary files /dev/null and b/src/assets/icons/ic_poo_black.png differ diff --git a/src/assets/icons/ic_poo_black@2x.png b/src/assets/icons/ic_poo_black@2x.png new file mode 100644 index 00000000..29addf39 Binary files /dev/null and b/src/assets/icons/ic_poo_black@2x.png differ diff --git a/src/assets/icons/ic_poo_black@3x.png b/src/assets/icons/ic_poo_black@3x.png new file mode 100644 index 00000000..bfff6498 Binary files /dev/null and b/src/assets/icons/ic_poo_black@3x.png differ diff --git a/src/assets/icons/ic_poo_white.png b/src/assets/icons/ic_poo_white.png new file mode 100644 index 00000000..a0f8b404 Binary files /dev/null and b/src/assets/icons/ic_poo_white.png differ diff --git a/src/assets/icons/ic_poo_white@2x.png b/src/assets/icons/ic_poo_white@2x.png new file mode 100644 index 00000000..5685582d Binary files /dev/null and b/src/assets/icons/ic_poo_white@2x.png differ diff --git a/src/assets/icons/ic_poo_white@3x.png b/src/assets/icons/ic_poo_white@3x.png new file mode 100644 index 00000000..580cf0fb Binary files /dev/null and b/src/assets/icons/ic_poo_white@3x.png differ diff --git a/src/assets/icons/ic_profile@2x.png b/src/assets/icons/ic_profile_off@2x.png similarity index 100% rename from src/assets/icons/ic_profile@2x.png rename to src/assets/icons/ic_profile_off@2x.png diff --git a/src/assets/icons/ic_profile@3x.png b/src/assets/icons/ic_profile_off@3x.png similarity index 100% rename from src/assets/icons/ic_profile@3x.png rename to src/assets/icons/ic_profile_off@3x.png diff --git a/src/assets/icons/ic_profile_on@2x.png b/src/assets/icons/ic_profile_on@2x.png new file mode 100644 index 00000000..7b4ca541 Binary files /dev/null and b/src/assets/icons/ic_profile_on@2x.png differ diff --git a/src/assets/icons/ic_profile_on@3x.png b/src/assets/icons/ic_profile_on@3x.png new file mode 100644 index 00000000..6132655d Binary files /dev/null and b/src/assets/icons/ic_profile_on@3x.png differ diff --git a/src/assets/icons/ic_rating.png b/src/assets/icons/ic_rating.png index a00c73e6..ea02e8c5 100644 Binary files a/src/assets/icons/ic_rating.png and b/src/assets/icons/ic_rating.png differ diff --git a/src/assets/icons/ic_rating@2x.png b/src/assets/icons/ic_rating@2x.png index 6e696a60..a9af619c 100644 Binary files a/src/assets/icons/ic_rating@2x.png and b/src/assets/icons/ic_rating@2x.png differ diff --git a/src/assets/icons/ic_rating@3x.png b/src/assets/icons/ic_rating@3x.png index 2342e8ab..f56eaf91 100644 Binary files a/src/assets/icons/ic_rating@3x.png and b/src/assets/icons/ic_rating@3x.png differ diff --git a/src/assets/icons/ic_scrap.png b/src/assets/icons/ic_scrap_off.png similarity index 100% rename from src/assets/icons/ic_scrap.png rename to src/assets/icons/ic_scrap_off.png diff --git a/src/assets/icons/ic_scrap@2x.png b/src/assets/icons/ic_scrap_off@2x.png similarity index 100% rename from src/assets/icons/ic_scrap@2x.png rename to src/assets/icons/ic_scrap_off@2x.png diff --git a/src/assets/icons/ic_scrap@3x.png b/src/assets/icons/ic_scrap_off@3x.png similarity index 100% rename from src/assets/icons/ic_scrap@3x.png rename to src/assets/icons/ic_scrap_off@3x.png diff --git a/src/assets/icons/ic_scrap_on.png b/src/assets/icons/ic_scrap_on.png new file mode 100644 index 00000000..ca43b699 Binary files /dev/null and b/src/assets/icons/ic_scrap_on.png differ diff --git a/src/assets/icons/ic_scrap_on@2x.png b/src/assets/icons/ic_scrap_on@2x.png new file mode 100644 index 00000000..d36a388f Binary files /dev/null and b/src/assets/icons/ic_scrap_on@2x.png differ diff --git a/src/assets/icons/ic_scrap_on@3x.png b/src/assets/icons/ic_scrap_on@3x.png new file mode 100644 index 00000000..edccfc82 Binary files /dev/null and b/src/assets/icons/ic_scrap_on@3x.png differ diff --git a/src/assets/icons/ic_setting@2x.png b/src/assets/icons/ic_setting@2x.png new file mode 100644 index 00000000..5d42ac21 Binary files /dev/null and b/src/assets/icons/ic_setting@2x.png differ diff --git a/src/assets/icons/ic_setting@3x.png b/src/assets/icons/ic_setting@3x.png new file mode 100644 index 00000000..485de1ff Binary files /dev/null and b/src/assets/icons/ic_setting@3x.png differ diff --git a/src/assets/icons/ic_thumbnail.png b/src/assets/icons/ic_thumbnail.png deleted file mode 100644 index de56e481..00000000 Binary files a/src/assets/icons/ic_thumbnail.png and /dev/null differ diff --git a/src/assets/icons/ic_thumbnail@2x.png b/src/assets/icons/ic_thumbnail@2x.png deleted file mode 100644 index b7ede61c..00000000 Binary files a/src/assets/icons/ic_thumbnail@2x.png and /dev/null differ diff --git a/src/assets/icons/ic_thumbnail@3x.png b/src/assets/icons/ic_thumbnail@3x.png deleted file mode 100644 index 85147a78..00000000 Binary files a/src/assets/icons/ic_thumbnail@3x.png and /dev/null differ diff --git a/src/assets/icons/ic_wdd@2x.png b/src/assets/icons/ic_wdd_off@2x.png similarity index 100% rename from src/assets/icons/ic_wdd@2x.png rename to src/assets/icons/ic_wdd_off@2x.png diff --git a/src/assets/icons/ic_wdd@3x.png b/src/assets/icons/ic_wdd_off@3x.png similarity index 100% rename from src/assets/icons/ic_wdd@3x.png rename to src/assets/icons/ic_wdd_off@3x.png diff --git a/src/assets/icons/ic_wdd_on@2x.png b/src/assets/icons/ic_wdd_on@2x.png new file mode 100644 index 00000000..0eb996cc Binary files /dev/null and b/src/assets/icons/ic_wdd_on@2x.png differ diff --git a/src/assets/icons/ic_wdd_on@3x.png b/src/assets/icons/ic_wdd_on@3x.png new file mode 100644 index 00000000..bf0d94ea Binary files /dev/null and b/src/assets/icons/ic_wdd_on@3x.png differ diff --git a/src/assets/icons/logo_img@2x.png b/src/assets/icons/logo_img@2x.png deleted file mode 100644 index 09322b3b..00000000 Binary files a/src/assets/icons/logo_img@2x.png and /dev/null differ diff --git a/src/assets/icons/logo_img@3x.png b/src/assets/icons/logo_img@3x.png deleted file mode 100644 index 8deae288..00000000 Binary files a/src/assets/icons/logo_img@3x.png and /dev/null differ diff --git a/src/assets/icons/logo_text_black.png b/src/assets/icons/logo_text_black.png new file mode 100644 index 00000000..ec9fac3f Binary files /dev/null and b/src/assets/icons/logo_text_black.png differ diff --git a/src/assets/icons/logo_text_black@2x.png b/src/assets/icons/logo_text_black@2x.png new file mode 100644 index 00000000..cd67cdec Binary files /dev/null and b/src/assets/icons/logo_text_black@2x.png differ diff --git a/src/assets/icons/logo_text_black@3x.png b/src/assets/icons/logo_text_black@3x.png new file mode 100644 index 00000000..88d4677b Binary files /dev/null and b/src/assets/icons/logo_text_black@3x.png differ diff --git a/src/assets/icons/logo_text_white.png b/src/assets/icons/logo_text_white.png new file mode 100644 index 00000000..4a148f8c Binary files /dev/null and b/src/assets/icons/logo_text_white.png differ diff --git a/src/assets/icons/logo_text_white@2x.png b/src/assets/icons/logo_text_white@2x.png new file mode 100644 index 00000000..ef130b61 Binary files /dev/null and b/src/assets/icons/logo_text_white@2x.png differ diff --git a/src/assets/icons/logo_text_white@3x.png b/src/assets/icons/logo_text_white@3x.png new file mode 100644 index 00000000..f321e096 Binary files /dev/null and b/src/assets/icons/logo_text_white@3x.png differ diff --git a/src/assets/images/img_banner_wdd.png b/src/assets/images/img_banner_wdd.png new file mode 100644 index 00000000..38852699 Binary files /dev/null and b/src/assets/images/img_banner_wdd.png differ diff --git a/src/assets/images/img_banner_wdd@2x.png b/src/assets/images/img_banner_wdd@2x.png new file mode 100644 index 00000000..55259045 Binary files /dev/null and b/src/assets/images/img_banner_wdd@2x.png differ diff --git a/src/assets/images/img_banner_wdd@3x.png b/src/assets/images/img_banner_wdd@3x.png new file mode 100644 index 00000000..f6441c13 Binary files /dev/null and b/src/assets/images/img_banner_wdd@3x.png differ diff --git a/src/assets/images/img_no_dog.png b/src/assets/images/img_no_dog.png new file mode 100644 index 00000000..333a4f74 Binary files /dev/null and b/src/assets/images/img_no_dog.png differ diff --git a/src/assets/images/img_no_dog@2x.png b/src/assets/images/img_no_dog@2x.png new file mode 100644 index 00000000..a3eade38 Binary files /dev/null and b/src/assets/images/img_no_dog@2x.png differ diff --git a/src/assets/images/img_no_dog@3x.png b/src/assets/images/img_no_dog@3x.png new file mode 100644 index 00000000..c69dd602 Binary files /dev/null and b/src/assets/images/img_no_dog@3x.png differ diff --git a/src/assets/images/img_no_feed.png b/src/assets/images/img_no_feed.png new file mode 100644 index 00000000..87869d2d Binary files /dev/null and b/src/assets/images/img_no_feed.png differ diff --git a/src/assets/images/img_no_feed@2x.png b/src/assets/images/img_no_feed@2x.png new file mode 100644 index 00000000..5b56e69a Binary files /dev/null and b/src/assets/images/img_no_feed@2x.png differ diff --git a/src/assets/images/img_no_feed@3x.png b/src/assets/images/img_no_feed@3x.png new file mode 100644 index 00000000..d73e6ebb Binary files /dev/null and b/src/assets/images/img_no_feed@3x.png differ diff --git a/src/assets/images/img_no_like.png b/src/assets/images/img_no_like.png new file mode 100644 index 00000000..99fa7c58 Binary files /dev/null and b/src/assets/images/img_no_like.png differ diff --git a/src/assets/images/img_no_like@2x.png b/src/assets/images/img_no_like@2x.png new file mode 100644 index 00000000..36e611c7 Binary files /dev/null and b/src/assets/images/img_no_like@2x.png differ diff --git a/src/assets/images/img_no_like@3x.png b/src/assets/images/img_no_like@3x.png new file mode 100644 index 00000000..ca867d90 Binary files /dev/null and b/src/assets/images/img_no_like@3x.png differ diff --git a/src/assets/images/img_no_scrap.png b/src/assets/images/img_no_scrap.png new file mode 100644 index 00000000..76e00366 Binary files /dev/null and b/src/assets/images/img_no_scrap.png differ diff --git a/src/assets/images/img_no_scrap@2x.png b/src/assets/images/img_no_scrap@2x.png new file mode 100644 index 00000000..a72d809a Binary files /dev/null and b/src/assets/images/img_no_scrap@2x.png differ diff --git a/src/assets/images/img_no_scrap@3x.png b/src/assets/images/img_no_scrap@3x.png new file mode 100644 index 00000000..4a301e41 Binary files /dev/null and b/src/assets/images/img_no_scrap@3x.png differ diff --git a/src/assets/images/img_prepare_1.png b/src/assets/images/img_prepare_1.png new file mode 100644 index 00000000..14b9570e Binary files /dev/null and b/src/assets/images/img_prepare_1.png differ diff --git a/src/assets/images/img_prepare_1@2x.png b/src/assets/images/img_prepare_1@2x.png new file mode 100644 index 00000000..5821923c Binary files /dev/null and b/src/assets/images/img_prepare_1@2x.png differ diff --git a/src/assets/images/img_prepare_2.png b/src/assets/images/img_prepare_2.png new file mode 100644 index 00000000..df7e6f23 Binary files /dev/null and b/src/assets/images/img_prepare_2.png differ diff --git a/src/assets/images/img_prepare_2@2x.png b/src/assets/images/img_prepare_2@2x.png new file mode 100644 index 00000000..07663bcc Binary files /dev/null and b/src/assets/images/img_prepare_2@2x.png differ diff --git a/src/assets/images/img_prepare_3.png b/src/assets/images/img_prepare_3.png new file mode 100644 index 00000000..e5826c78 Binary files /dev/null and b/src/assets/images/img_prepare_3.png differ diff --git a/src/assets/images/img_prepare_3@2x.png b/src/assets/images/img_prepare_3@2x.png new file mode 100644 index 00000000..05f08ff3 Binary files /dev/null and b/src/assets/images/img_prepare_3@2x.png differ diff --git a/src/assets/images/img_prepare_go.png b/src/assets/images/img_prepare_go.png new file mode 100644 index 00000000..4facf0c8 Binary files /dev/null and b/src/assets/images/img_prepare_go.png differ diff --git a/src/assets/images/img_prepare_go@2x.png b/src/assets/images/img_prepare_go@2x.png new file mode 100644 index 00000000..f799e4c2 Binary files /dev/null and b/src/assets/images/img_prepare_go@2x.png differ diff --git a/src/assets/images/img_standing.jpg b/src/assets/images/img_standing.jpg new file mode 100644 index 00000000..0c6baca0 Binary files /dev/null and b/src/assets/images/img_standing.jpg differ diff --git a/src/assets/images/img_thumbnail_default.png b/src/assets/images/img_thumbnail_default.png new file mode 100644 index 00000000..d6fa5906 Binary files /dev/null and b/src/assets/images/img_thumbnail_default.png differ diff --git a/src/assets/images/img_thumbnail_default@2x.png b/src/assets/images/img_thumbnail_default@2x.png new file mode 100644 index 00000000..788f2741 Binary files /dev/null and b/src/assets/images/img_thumbnail_default@2x.png differ diff --git a/src/assets/images/img_thumbnail_default@3x.png b/src/assets/images/img_thumbnail_default@3x.png new file mode 100644 index 00000000..ef757556 Binary files /dev/null and b/src/assets/images/img_thumbnail_default@3x.png differ diff --git a/src/assets/images/img_walking.gif b/src/assets/images/img_walking.gif new file mode 100644 index 00000000..07252813 Binary files /dev/null and b/src/assets/images/img_walking.gif differ diff --git a/src/aws-exports.js b/src/aws-exports.js deleted file mode 100644 index b5e58318..00000000 --- a/src/aws-exports.js +++ /dev/null @@ -1,14 +0,0 @@ -// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten. - -const awsmobile = { - aws_project_region: 'ap-northeast-2', - aws_cognito_identity_pool_id: - 'ap-northeast-2:8a333684-da29-4ec9-bd2d-77f38d44b5a2', - aws_cognito_region: 'ap-northeast-2', - aws_user_pools_id: 'ap-northeast-2_7gSBHlM5o', - aws_user_pools_web_client_id: '3fvh6b2rec72k8cak4v16f3luc', - aws_user_files_s3_bucket: 'wdd-client-file', - aws_user_files_s3_bucket_region: 'ap-northeast-2', -}; - -export default awsmobile; diff --git a/src/components/base/BottomTabbar/BottomTabbar.styles.ts b/src/components/base/BottomTabbar/BottomTabbar.styles.ts index ece0996d..5672e327 100644 --- a/src/components/base/BottomTabbar/BottomTabbar.styles.ts +++ b/src/components/base/BottomTabbar/BottomTabbar.styles.ts @@ -1,16 +1,18 @@ import { Dimensions, StyleSheet } from 'react-native'; -import { color, font } from 'src/theme'; +import { color } from 'src/theme'; const circleSize = 60; -const { width, height } = Dimensions.get('window'); +const { width } = Dimensions.get('window'); export const views = StyleSheet.create({ container: { - height: height * 0.087, + height: 60, backgroundColor: color.white, flexDirection: 'row', justifyContent: 'space-between', + borderTopWidth: 0.5, + borderColor: color.grayB1, }, tabWrapper: { flexBasis: width * 0.387, @@ -25,7 +27,7 @@ export const views = StyleSheet.create({ centerTab: { position: 'absolute', zIndex: 99, - top: -circleSize / 2, + top: -circleSize * 0.32, left: '50%', marginLeft: -circleSize / 2, width: circleSize, @@ -55,7 +57,12 @@ export const views = StyleSheet.create({ export const texts = StyleSheet.create({ tabLabel: { marginTop: 2, + fontSize: 10, + }, + tabLabelOn: { + color: color.blue, + }, + tabLabelOff: { color: color.grayB1, - fontSize: font.size.small, }, }); diff --git a/src/components/base/BottomTabbar/BottomTabbar.tsx b/src/components/base/BottomTabbar/BottomTabbar.tsx index 52254bd6..c62cf65c 100644 --- a/src/components/base/BottomTabbar/BottomTabbar.tsx +++ b/src/components/base/BottomTabbar/BottomTabbar.tsx @@ -1,11 +1,12 @@ import React from 'react'; import { Image, Text, TouchableOpacity, View } from 'react-native'; -import { NavigationRoute, TabBarBottomProps } from 'react-navigation'; +import { BottomTabBarProps, NavigationRoute } from 'react-navigation'; import { connect } from 'react-redux'; +import { NavigationTabs } from 'src/pages/Router'; import { ReducerState } from 'src/store/reducers'; import { texts, views } from './BottomTabbar.styles'; -interface Props extends TabBarBottomProps { +interface Props extends BottomTabBarProps { walk: ReducerState['walk']; } @@ -19,7 +20,8 @@ const BottomNavbar: React.FC = ({ navigation, walk }) => { const isCurrentIndex = index === navigation.state.index; const isActive = walk.status === 'WALKING'; - if (index > 0) { + if (index !== NavigationTabs.MAP) { + const { iconOn, iconOff, label } = route.params; return ( = ({ navigation, walk }) => { activeOpacity={0.7} onPress={() => navToRoute(route)} disabled={isCurrentIndex}> - - {route.params.label} + + + {label} + ); diff --git a/src/components/base/Core.tsx b/src/components/base/Core.tsx index 2bb68210..873e8de0 100644 --- a/src/components/base/Core.tsx +++ b/src/components/base/Core.tsx @@ -4,7 +4,7 @@ import 'moment/locale/ko'; import React, { PureComponent } from 'react'; import { NavigationScreenProps } from 'react-navigation'; import { connect } from 'react-redux'; -import awsconfig from 'src/aws-exports'; +import awsmobile from 'src/aws-exports'; import Splash from 'src/components/module/Splash'; import configAxios from 'src/services/api/axios'; import * as userActions from 'src/store/actions/user'; @@ -17,8 +17,8 @@ class Core extends PureComponent { constructor(props: Props) { super(props); configAxios(); + Amplify.configure(awsmobile); moment.locale('ko'); - Amplify.configure(awsconfig); } componentDidMount() { diff --git a/src/components/base/withLoading.tsx b/src/components/base/withLoading.tsx index ccbcccdb..0b7b4cd9 100644 --- a/src/components/base/withLoading.tsx +++ b/src/components/base/withLoading.tsx @@ -1,6 +1,6 @@ import React, { Component, ComponentType } from 'react'; -import { Animated, Easing, Modal, View } from 'react-native'; -import { color } from 'src/theme'; +import { Animated, Easing, Modal, Text, View } from 'react-native'; +import { color, font } from 'src/theme'; export interface LoadingProps { toggleLoading: () => {}; @@ -44,29 +44,40 @@ export default function withLoading

( return ( <> - + + + + 저장중입니다. + - ); } diff --git a/src/components/base/withMessage.tsx b/src/components/base/withMessage.tsx new file mode 100644 index 00000000..c4d20e2c --- /dev/null +++ b/src/components/base/withMessage.tsx @@ -0,0 +1,79 @@ +import React, { Component, ComponentType } from 'react'; +import { Animated, SafeAreaView, StyleSheet, Text, View } from 'react-native'; +import { color } from 'src/theme'; + +export interface MessageProps { + showMessage: (message: string) => void; +} + +interface State { + message?: string; +} + +const messageHeight = 40; +const styles = StyleSheet.create({ + container: { + position: 'absolute', + bottom: 38, + left: 0, + right: 0, + alignItems: 'center', + }, + wrapper: { + paddingHorizontal: 16, + height: messageHeight, + borderRadius: messageHeight / 2, + backgroundColor: color.blue, + justifyContent: 'center', + alignItems: 'center', + }, + message: { + fontSize: 15, + color: color.white, + }, +}); + +export default function withMessage

( + WrappedComponent: ComponentType

+) { + return class WithMessage extends Component { + private opacity = new Animated.Value(0); + + state: State = { message: undefined }; + + showMessage = (message: string) => { + this.setState({ message }); + Animated.timing(this.opacity, { + toValue: 1, + duration: 80, + useNativeDriver: true, + }).start(); + setTimeout(() => { + Animated.timing(this.opacity, { + toValue: 0, + duration: 120, + useNativeDriver: true, + }).start(e => { + if (e.finished) this.setState({ message: undefined }); + }); + }, 1600); + }; + + render() { + const { message } = this.state; + return ( + + + {message && ( + + + {message} + + + )} + + ); + } + }; +} diff --git a/src/components/container/LabelWrapper/LabelWrapper.styles.ts b/src/components/container/LabelWrapper/LabelWrapper.styles.ts index 7d5ba39e..78e5b0ba 100644 --- a/src/components/container/LabelWrapper/LabelWrapper.styles.ts +++ b/src/components/container/LabelWrapper/LabelWrapper.styles.ts @@ -3,9 +3,9 @@ import { color, font } from 'src/theme'; export const texts = StyleSheet.create({ label: { - color: `${color.black}78`, - fontSize: font.size.small, - marginBottom: 8, + color: color.black33Opacity, + fontSize: font.size.medium, + marginBottom: 12, }, }); diff --git a/src/components/container/PageContainer/PageContainer.styles.ts b/src/components/container/PageContainer/PageContainer.styles.ts index 9903191f..94a5be0b 100644 --- a/src/components/container/PageContainer/PageContainer.styles.ts +++ b/src/components/container/PageContainer/PageContainer.styles.ts @@ -1,15 +1,14 @@ import { Dimensions, StyleSheet } from 'react-native'; -import { color, font } from 'src/theme'; +import { color, font, size } from 'src/theme'; const { width, height } = Dimensions.get('window'); -export const horizontalSize = width * 0.064; export const views = StyleSheet.create({ container: { flex: 1 }, - contentWrapper: { flex: 1, marginHorizontal: horizontalSize }, + contentWrapper: { flex: 1, marginHorizontal: size.horizontal }, bottom: { width, - paddingHorizontal: horizontalSize, + paddingHorizontal: size.horizontal, marginBottom: height * 0.045, }, bottomBox: { @@ -39,7 +38,7 @@ export const views = StyleSheet.create({ export const texts = StyleSheet.create({ top: { - color: color.blackOpacity, + color: color.black, fontSize: 16, }, bottomBox: { diff --git a/src/components/container/PageContainer/PageContainer.tsx b/src/components/container/PageContainer/PageContainer.tsx index e57f1697..494f9f02 100644 --- a/src/components/container/PageContainer/PageContainer.tsx +++ b/src/components/container/PageContainer/PageContainer.tsx @@ -15,6 +15,7 @@ import { View, ScrollView, Platform, + Keyboard, } from 'react-native'; interface Props { @@ -24,6 +25,8 @@ interface Props { title?: string; subtitle?: string; titleNarrow?: boolean; + titleOnScroll?: string; + alignTitleCenter?: boolean; // top left?: { navigation: NavigationScreenProp; @@ -34,7 +37,6 @@ interface Props { handlePress: () => void; }; center?: string; - showBorder?: boolean; // bottom bottom?: { view: ReactNode; @@ -46,8 +48,10 @@ interface Props { disable: boolean; }; // option + showBorder?: boolean; extraScrollHeight?: number; extraBottom?: number; + enableScroll?: boolean; } interface State { @@ -90,16 +94,21 @@ class PageContainer extends PureComponent { }; handleScroll = (evt: NativeSyntheticEvent) => { - const { center, title } = this.props; + const { center, title, titleOnScroll } = this.props; const { contentOffset } = evt.nativeEvent; this.setState(state => produce(state, draft => { - if (contentOffset && contentOffset.y > 84) { + if (contentOffset.y > 84) { if (!state.showBorder) draft.showBorder = true; - if (title && !center && !state.center) draft.center = title; + if (!center && !state.center) { + if (title) draft.center = title; + if (titleOnScroll) draft.center = titleOnScroll; + } } else { if (state.showBorder) draft.showBorder = false; - if (state.center) delete draft.center; + if ((title || titleOnScroll) && state.center) { + draft.center = undefined; + } } }) ); @@ -111,14 +120,17 @@ class PageContainer extends PureComponent { title, subtitle, titleNarrow, + alignTitleCenter, left, right, bottom, bottomBox, + enableScroll, extraBottom: extraScrollHeight = 85, } = this.props; const navLeft = left && { handlePress: () => { + Keyboard.dismiss(); if (left.routeName) left.navigation.navigate(left.routeName); else left.navigation.goBack(null); }, @@ -130,7 +142,10 @@ class PageContainer extends PureComponent { ), }; const navRight = right && { - handlePress: right.handlePress, + handlePress: () => { + Keyboard.dismiss(); + right.handlePress(); + }, view: typeof right.view === 'string' ? ( {right.view} @@ -154,17 +169,33 @@ class PageContainer extends PureComponent { style={views.contentWrapper} onScroll={this.handleScroll} scrollEventThrottle={160} - scrollEnabled={bottomBox !== undefined} + scrollEnabled={enableScroll || bottomBox !== undefined} showsVerticalScrollIndicator={false}> {title && ( - {title} - {subtitle && {subtitle}} + + {title} + + {subtitle && ( + + {subtitle} + + )} )} {children} - {bottomBox && } + {(enableScroll || bottomBox) && ( + + )} {bottom && ( {bottom.view} diff --git a/src/components/module/DateInput/DateInput.styles.ts b/src/components/module/DateInput/DateInput.styles.ts index f783a522..9344d4a3 100644 --- a/src/components/module/DateInput/DateInput.styles.ts +++ b/src/components/module/DateInput/DateInput.styles.ts @@ -5,13 +5,14 @@ export const views = StyleSheet.create({ datePicker: { // outer size width: '100%', + marginTop: 4, }, dateInput: { // border styles height: 49, borderWidth: 1, borderRadius: 5, - borderColor: color.grayDA, + borderColor: color.grayEF, paddingHorizontal: 12, }, }); diff --git a/src/components/module/DefaultImage/DefaultImage.tsx b/src/components/module/DefaultImage/DefaultImage.tsx new file mode 100644 index 00000000..2410c7c0 --- /dev/null +++ b/src/components/module/DefaultImage/DefaultImage.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { Image } from 'react-native'; +import { color } from 'src/theme'; + +interface Props { + size: number; + uri?: string; + showBorder?: boolean; +} + +const DefaultImage: React.FC = ({ size, uri, showBorder }) => ( + +); + +export default DefaultImage; diff --git a/src/components/module/DefaultImage/index.ts b/src/components/module/DefaultImage/index.ts new file mode 100644 index 00000000..8d115500 --- /dev/null +++ b/src/components/module/DefaultImage/index.ts @@ -0,0 +1 @@ +export { default } from './DefaultImage'; diff --git a/src/components/module/DoubleTab/DoubleTab.tsx b/src/components/module/DoubleTab/DoubleTab.tsx new file mode 100644 index 00000000..cb4d4c15 --- /dev/null +++ b/src/components/module/DoubleTab/DoubleTab.tsx @@ -0,0 +1,36 @@ +import React, { ReactNode } from 'react'; +import { TouchableOpacity } from 'react-native'; + +interface Props { + onDoubleTab: () => void; + children: ReactNode; + delay?: number; + style?: object; +} + +class DoubleTab extends React.Component { + private lastTap?: number; + + handleDoubleTab = () => { + const { delay, onDoubleTab } = this.props; + const now = Date.now(); + if (this.lastTap && now - this.lastTap < (delay || 300)) { + onDoubleTab(); + } else { + this.lastTap = now; + } + }; + + render() { + return ( + + {this.props.children} + + ); + } +} + +export default DoubleTab; diff --git a/src/components/module/DoubleTab/index.ts b/src/components/module/DoubleTab/index.ts new file mode 100644 index 00000000..43c32510 --- /dev/null +++ b/src/components/module/DoubleTab/index.ts @@ -0,0 +1 @@ +export { default } from './DoubleTab'; diff --git a/src/components/module/EmptyList/EmptyList.tsx b/src/components/module/EmptyList/EmptyList.tsx new file mode 100644 index 00000000..a4721881 --- /dev/null +++ b/src/components/module/EmptyList/EmptyList.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import { Image, Text, View } from 'react-native'; +import { color, font } from 'src/theme'; + +interface Props { + source: NodeRequire; + message: string; + style?: object; +} + +const EmptyList: React.FC = ({ source, message, style }) => ( + + + + {message} + + +); + +export default EmptyList; diff --git a/src/components/module/EmptyList/index.ts b/src/components/module/EmptyList/index.ts new file mode 100644 index 00000000..279d1190 --- /dev/null +++ b/src/components/module/EmptyList/index.ts @@ -0,0 +1 @@ +export { default } from './EmptyList'; diff --git a/src/components/module/Feed/Feed.styles.ts b/src/components/module/Feed/Feed.styles.ts new file mode 100644 index 00000000..cb78b5ff --- /dev/null +++ b/src/components/module/Feed/Feed.styles.ts @@ -0,0 +1,141 @@ +import { Dimensions, StyleSheet } from 'react-native'; +import { color, font, size } from 'src/theme'; + +export const { width } = Dimensions.get('window'); +const paginateHeight = 25; + +export const views = StyleSheet.create({ + summeryWrapper: { + height: 43, + flexDirection: 'row', + alignItems: 'center', + paddingHorizontal: size.horizontal, + backgroundColor: color.grayF9, + borderBottomWidth: 1, + borderColor: color.grayEF, + }, + header: { + paddingHorizontal: size.horizontal, + height: 52, + flexDirection: 'row', + alignItems: 'center', + }, + message: { + flex: 1, + marginLeft: 4, + }, + headerButton: { + paddingLeft: 16, + height: '100%', + alignItems: 'center', + flexDirection: 'row', + }, + smallDot: { + width: 3, + height: 3, + borderRadius: 1.5, + backgroundColor: color.black33Opacity, + marginLeft: 2, + }, + image: { + width, + height: width, + resizeMode: 'contain', + backgroundColor: color.grayF9, + }, + infoWrapper: { + height: 43, + paddingHorizontal: size.horizontal, + flexDirection: 'row', + justifyContent: 'space-between', + borderTopWidth: 1, + borderBottomWidth: 1, + borderColor: color.grayEF, + }, + infoItem: { + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + }, + infoIcon: { + height: 18, + resizeMode: 'contain', + }, + paginateStatus: { + position: 'absolute', + bottom: 10, + right: 9, + height: paginateHeight, + paddingHorizontal: 8, + borderRadius: paginateHeight / 2, + alignItems: 'center', + justifyContent: 'center', + backgroundColor: color.blackOpacity, + }, + textWrapper: { + paddingHorizontal: size.horizontal, + paddingTop: 16, + paddingBottom: 20, + borderBottomWidth: 0.5, + borderColor: color.grayEF, + }, + likeInfo: { + flexDirection: 'row', + alignItems: 'center', + }, + likeAnimation: { + ...StyleSheet.absoluteFillObject, + justifyContent: 'center', + alignItems: 'center', + }, +}); + +export const texts = StyleSheet.create({ + name: { + marginLeft: 8, + color: color.black, + fontSize: 16, + fontWeight: '600', + }, + message: { + marginLeft: 4, + color: color.black33Opacity, + fontSize: 11, + }, + info: { + marginLeft: 4, + color: '#848484', + fontSize: font.size.medium, + }, + paginate: { + color: color.white, + fontSize: font.size.small, + }, + likes: { + marginLeft: 8, + color: color.black33, + fontSize: font.size.medium, + fontWeight: '700', + }, + memo: { + marginTop: 12, + color: '#484848', + fontSize: 15, + }, + summeryDate: { + flex: 1, + color: color.gray48, + fontSize: font.size.small, + }, + summeryRight: { + fontSize: font.size.small, + color: color.blackOpacity, + }, +}); + +export const icons = StyleSheet.create({ + heart: { + width: 18, + height: 16, + }, +}); diff --git a/src/components/module/Feed/Feed.tsx b/src/components/module/Feed/Feed.tsx new file mode 100644 index 00000000..7cd92618 --- /dev/null +++ b/src/components/module/Feed/Feed.tsx @@ -0,0 +1,275 @@ +import { find } from 'lodash'; +import moment from 'moment'; +import React, { PureComponent } from 'react'; +import ActionSheet from 'react-native-actionsheet'; +import { FlatList } from 'react-native-gesture-handler'; +import { connect } from 'react-redux'; +import { rangeWithUnit, timeWithUnit } from 'src/assets/functions/print'; +import DefaultImage from 'src/components/module/DefaultImage'; +import DoubleTab from 'src/components/module/DoubleTab'; +import { ReducerState } from 'src/store/reducers'; +import { icons, texts, views } from './Feed.styles'; +import { + Animated, + Image, + Text, + TouchableOpacity, + View, + ViewToken, +} from 'react-native'; +import { + deleteFeed, + pushLike, + undoLike, + Feed as FeedInterface, +} from 'src/services/api/feed'; + +interface Props { + feed: FeedInterface; + prevFeed?: FeedInterface | null; + user: ReducerState['user']; + deleteFromList: (id: string) => void; +} + +interface State { + index: number; + pushedLike: boolean; + showAnimation: boolean; + likeCount: number; + heartSize: Animated.Value; +} + +enum Actions { + Delete, + Cancel, +} + +class Feed extends PureComponent { + private actionSheet = React.createRef(); + + state: State = { + index: 1, + pushedLike: false, + showAnimation: false, + likeCount: 0, + heartSize: new Animated.Value(0), + }; + + componentDidMount() { + const { feed, user } = this.props; + this.setState({ + pushedLike: + find(feed.likes, like => user._id === like.user) !== undefined, + likeCount: feed.likes.length, + }); + } + + toggleLike = () => { + const { _id } = this.props.feed; + const pushedLike = !this.state.pushedLike; + this.setState({ + pushedLike, + likeCount: pushedLike + ? this.state.likeCount + 1 + : this.state.likeCount - 1, + showAnimation: pushedLike, + }); + + if (pushedLike) { + pushLike({ _id }); + Animated.timing(this.state.heartSize, { + toValue: 1, + duration: 60, + useNativeDriver: true, + }).start(bigger => { + if (bigger.finished) { + setTimeout(() => { + Animated.timing(this.state.heartSize, { + toValue: 0, + duration: 120, + useNativeDriver: true, + }).start(smaller => { + if (smaller.finished) { + this.setState({ showAnimation: false }); + } + }); + }, 1600); + } + }); + } else { + undoLike({ _id }); + } + }; + + handleIndexChanged = (info: { + viewableItems: ViewToken[]; + changed: ViewToken[]; + }) => { + const index = (info.viewableItems[0].index || 0) + 1; + this.setState({ index }); + }; + + handlePressDots = () => { + const actionSheet = this.actionSheet.current; + if (actionSheet) actionSheet.show(); + }; + + handleActionSheet = async (index: number) => { + if (Actions.Delete === index) { + const { _id } = this.props.feed; + await deleteFeed({ _id }); + this.props.deleteFromList(_id); + } + }; + + renderSummery = () => { + const { feed, user, prevFeed } = this.props; + const yearMonth = moment(feed.createdAt).format('YYYY년 MM월'); + if ( + prevFeed === null || + (prevFeed && yearMonth < moment(prevFeed.createdAt).format('YYYY년 MM월')) + ) { + if (!user.repDog) return; + const summery = find( + user.repDog.histories, + history => history.yearMonth === yearMonth + ); + if (summery) { + return ( + + {summery.yearMonth} 산책 + {`${ + summery.count + }회 / ${rangeWithUnit(summery.distance)} / ${timeWithUnit( + summery.seconds + )} / ${summery.steps}걸음 / ${Math.floor( + summery.steps / 28.5 + )}kcal`} + + ); + } + } + return null; + }; + + render() { + const { feed, user } = this.props; + + return ( + + {this.renderSummery()} + + + {feed.dog.name} + + + {moment(feed.createdAt).fromNow()} + + + {user._id === feed.user && ( + + + + + + )} + + + index.toString()} + viewabilityConfig={{ + itemVisiblePercentThreshold: 50, + }} + renderItem={({ item }) => ( + + + + )} + showsHorizontalScrollIndicator={false} + onViewableItemsChanged={this.handleIndexChanged} + pagingEnabled + horizontal + /> + {this.state.showAnimation && ( + + + + )} + + {`${this.state.index} / ${ + feed.images.length + }`} + + + + {[ + { + icon: require('src/assets/icons/ic_time.png'), + value: timeWithUnit(feed.seconds), + }, + { + icon: require('src/assets/icons/ic_distance.png'), + value: rangeWithUnit(feed.distance), + }, + { + icon: require('src/assets/icons/ic_poo_gray.png'), + value: `${feed.poos}회`, + }, + { + icon: require('src/assets/icons/ic_pee_gray.png'), + value: `${feed.pees}회`, + }, + ].map((data, index) => ( + + + {data.value} + + ))} + + + + + + + {this.state.likeCount} + + {feed.memo !== undefined && ( + {feed.memo} + )} + + + + ); + } +} + +export default connect((state: ReducerState) => ({ user: state.user }))(Feed); diff --git a/src/components/module/Feed/index.ts b/src/components/module/Feed/index.ts new file mode 100644 index 00000000..5beb2fc8 --- /dev/null +++ b/src/components/module/Feed/index.ts @@ -0,0 +1 @@ +export { default } from './Feed'; diff --git a/src/components/module/FeedHeader/FeedHeader.tsx b/src/components/module/FeedHeader/FeedHeader.tsx deleted file mode 100644 index fae12dfc..00000000 --- a/src/components/module/FeedHeader/FeedHeader.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { find } from 'lodash'; -import moment from 'moment'; -import React from 'react'; -import { Image, StyleSheet, Text, View } from 'react-native'; -import { horizontalSize } from 'src/components/container/PageContainer/PageContainer.styles'; -import { UserInterface } from 'src/store/actions/user'; -import { color, font } from 'src/theme'; - -interface Props { - user: UserInterface; - updatedAt: Date; -} - -const thumbnailSize = 32; -const styles = StyleSheet.create({ - wrapper: { - paddingHorizontal: horizontalSize, - paddingBottom: 12, - flexDirection: 'row', - alignItems: 'center', - }, - thumbnail: { - width: thumbnailSize, - height: thumbnailSize, - borderRadius: thumbnailSize / 2, - borderWidth: 1, - borderColor: color.grayEF, - resizeMode: 'contain', - }, - name: { - marginLeft: 10, - color: color.black, - fontSize: 16, - }, - time: { - marginLeft: 4, - color: `${color.black}4D`, - fontSize: font.size.small, - }, -}); - -const FeedHeader: React.FC = ({ user, updatedAt }) => { - const dog = find(user.dogs, dog => dog.default); - return ( - - {dog && ( - <> - - {dog.name} - - )} - {moment(updatedAt).fromNow()} - - ); -}; - -export default FeedHeader; diff --git a/src/components/module/FeedHeader/index.ts b/src/components/module/FeedHeader/index.ts deleted file mode 100644 index 399f3a16..00000000 --- a/src/components/module/FeedHeader/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './FeedHeader'; diff --git a/src/components/module/ImageWithSticker/ImageWithSticker.styles.ts b/src/components/module/ImageWithSticker/ImageWithSticker.styles.ts index 147bdf97..ff366f3e 100644 --- a/src/components/module/ImageWithSticker/ImageWithSticker.styles.ts +++ b/src/components/module/ImageWithSticker/ImageWithSticker.styles.ts @@ -6,12 +6,13 @@ const { width } = Dimensions.get('window'); export const views = StyleSheet.create({ topWrapper: { alignItems: 'flex-end', - padding: 20, + padding: 44, }, bottomWrapper: { marginTop: 'auto', flexDirection: 'row', - padding: 20, + paddingHorizontal: 45, + paddingBottom: 30, justifyContent: 'space-between', }, item: { @@ -22,10 +23,30 @@ export const views = StyleSheet.create({ export const icons = StyleSheet.create({ logo: { - width: width * 0.4, - height: 48, + width: width * 0.309, + height: width * 0.053, resizeMode: 'contain', }, + go: { + width: 90, + height: 48, + }, + time: { + width: 19, + height: 18, + }, + distance: { + width: 14, + height: 19, + }, + poo: { + width: 18, + height: 17, + }, + pee: { + width: 11, + height: 17, + }, }); export const texts = StyleSheet.create({ @@ -34,4 +55,7 @@ export const texts = StyleSheet.create({ color: color.white, fontSize: font.size.medium, }, + black: { + color: '#242424', + }, }); diff --git a/src/components/module/ImageWithSticker/ImageWithSticker.tsx b/src/components/module/ImageWithSticker/ImageWithSticker.tsx index 55bcecd6..d9b43532 100644 --- a/src/components/module/ImageWithSticker/ImageWithSticker.tsx +++ b/src/components/module/ImageWithSticker/ImageWithSticker.tsx @@ -19,59 +19,106 @@ export interface ImageInterface { interface Props { image: ImageInterface; walk: ReducerState['walk']; + blackMode: boolean; size?: number; style?: object; } -const ImageWithSticker: React.FC = ({ image, walk, size, style }) => ( - - {image.stickers && ( - <> - {image.stickers.top && ( - - - - )} - - {image.stickers.time && ( - - - {Math.floor(walk.seconds / 60)}분 - - )} - {image.stickers.distance && ( - - - {rangeWithUnit(walk.distance)} - - )} - {image.stickers.poos && ( - - - {walk.poos}회 - - )} - {image.stickers.pees && ( - - - {walk.pees}회 +const ImageWithSticker: React.FC = ({ + image, + walk, + blackMode, + size, + style, +}) => { + const fontStyle = [texts.info, blackMode ? texts.black : null]; + return ( + + {image.stickers && ( + <> + {image.stickers.top && ( + + {image.stickers.top === 'LOGO' ? ( + + ) : ( + + )} )} - - - )} - -); + + {image.stickers.time && ( + + + {Math.floor(walk.seconds / 60)}분 + + )} + {image.stickers.distance && ( + + + {rangeWithUnit(walk.distance)} + + )} + {image.stickers.poos && ( + + + {walk.poos}회 + + )} + {image.stickers.pees && ( + + + {walk.pees}회 + + )} + + + )} + + ); +}; export default ImageWithSticker; diff --git a/src/components/module/Selector/Selector.styles.ts b/src/components/module/Selector/Selector.styles.ts index ee523b8b..dd53aadc 100644 --- a/src/components/module/Selector/Selector.styles.ts +++ b/src/components/module/Selector/Selector.styles.ts @@ -1,4 +1,5 @@ import { StyleSheet } from 'react-native'; +import { color, font } from 'src/theme'; export const views = StyleSheet.create({ boxWrapper: { @@ -6,3 +7,11 @@ export const views = StyleSheet.create({ marginHorizontal: -4, }, }); + +export const texts = StyleSheet.create({ + alert: { + color: color.red, + fontSize: font.size.small, + marginTop: 9, + }, +}); diff --git a/src/components/module/Selector/Selector.tsx b/src/components/module/Selector/Selector.tsx index 89eb27e3..9223344a 100644 --- a/src/components/module/Selector/Selector.tsx +++ b/src/components/module/Selector/Selector.tsx @@ -1,8 +1,8 @@ import React, { Component } from 'react'; -import { View } from 'react-native'; +import { Text, View } from 'react-native'; import LabelWrapper from 'src/components/container/LabelWrapper'; import { HandleChangeSelector } from './index'; -import { views } from './Selector.styles'; +import { texts, views } from './Selector.styles'; import ToggleBox from './ToggleBox'; interface Data { @@ -15,6 +15,7 @@ interface Props { name: string; list: Data[]; value?: string; + alert?: string; handleChange: (data: HandleChangeSelector) => void; } @@ -32,7 +33,7 @@ class Selector extends Component { }; render() { - const { label, list } = this.props; + const { label, list, alert } = this.props; return ( @@ -46,6 +47,7 @@ class Selector extends Component { /> ))} + {alert && {alert}} ); } diff --git a/src/components/module/Splash/Splash.tsx b/src/components/module/Splash/Splash.tsx index 90cb8611..d6b62559 100644 --- a/src/components/module/Splash/Splash.tsx +++ b/src/components/module/Splash/Splash.tsx @@ -1,16 +1,19 @@ import React from 'react'; -import { Image, StyleSheet, View } from 'react-native'; +import { Dimensions, Image, StyleSheet, View } from 'react-native'; import { color } from 'src/theme'; +const { width, height } = Dimensions.get('window'); + const styles = StyleSheet.create({ background: { - ...StyleSheet.absoluteFillObject, - paddingHorizontal: 6, - backgroundColor: color.white, + flex: 1, + backgroundColor: color.blue, + alignItems: 'center', }, image: { - width: '100%', - height: '100%', + marginTop: height * 0.285, + width: width * 0.52, + height: height * 0.05, resizeMode: 'contain', }, }); @@ -18,7 +21,7 @@ const styles = StyleSheet.create({ const Splash: React.FC<{}> = () => ( diff --git a/src/components/module/TextAutocomplete/TextAutocomplete.styles.ts b/src/components/module/TextAutocomplete/TextAutocomplete.styles.ts index a687c14c..3e6be76c 100644 --- a/src/components/module/TextAutocomplete/TextAutocomplete.styles.ts +++ b/src/components/module/TextAutocomplete/TextAutocomplete.styles.ts @@ -1,10 +1,9 @@ import { StyleSheet } from 'react-native'; -import { horizontalSize } from 'src/components/container/PageContainer/PageContainer.styles'; -import { color } from 'src/theme'; +import { color, size } from 'src/theme'; export const texts = StyleSheet.create({ input: { - width: '100%', + flex: 1, // font styles color: color.black, fontSize: 22, @@ -13,17 +12,18 @@ export const texts = StyleSheet.create({ export const views = StyleSheet.create({ inputWrapper: { - paddingVertical: 20, - paddingHorizontal: horizontalSize, + paddingBottom: 20, + paddingHorizontal: size.horizontal, marginTop: 8, marginBottom: 2, + flexDirection: 'row', + alignItems: 'center', // border styles borderBottomWidth: 1, borderColor: color.grayDA, }, autocompleteWrapper: { - flex: 1, - paddingHorizontal: horizontalSize, + paddingHorizontal: size.horizontal, }, }); @@ -32,4 +32,8 @@ export const icons = StyleSheet.create({ width: 15, height: 15, }, + clear: { + width: 20, + height: 20, + }, }); diff --git a/src/components/module/TextAutocomplete/TextAutocomplete.tsx b/src/components/module/TextAutocomplete/TextAutocomplete.tsx index 3b866140..c0d7877b 100644 --- a/src/components/module/TextAutocomplete/TextAutocomplete.tsx +++ b/src/components/module/TextAutocomplete/TextAutocomplete.tsx @@ -1,22 +1,29 @@ import * as Hangul from 'hangul-js'; import { sortBy } from 'lodash'; import React, { Component } from 'react'; -import { FlatList, Image, SafeAreaView, TextInput, View } from 'react-native'; import TopNavbar from 'src/components/module/TopNavbar'; import { color } from 'src/theme'; import { icons, texts, views } from './TextAutocomplete.styles'; import TextBox from './TextBox'; +import { + FlatList, + Image, + SafeAreaView, + TextInput, + View, + TouchableOpacity, +} from 'react-native'; export type Data = { name: string } & any; interface Props { placeholder: string; - list: Data[]; icon: NodeRequire; + staticList?: Data[]; defaultList?: Data[]; - handleSubmit: (data: Data) => void; - handleDismiss: () => void; - handleChange?: (keyword: string) => void; + onSubmit: (data: Data) => void; + onDismiss: () => void; + onSearch?: (keyword: string) => Promise; } interface State { @@ -24,44 +31,60 @@ interface State { autocomplete: Data[]; } +const disassemble = (value: string) => + Hangul.disassembleToString(value.replace(/\s/g, '')); + class TextAutocomplete extends Component { - state: State = { keyword: '', autocomplete: [] }; + private searchResult: Data[] | undefined; + private input = React.createRef(); + + state: State = { keyword: '', autocomplete: this.props.defaultList || [] }; - getAutocomplete = (value: string) => { - if (value.length < 2) return []; + getAutocomplete = (keyword: string, list: Data[]) => { // 한글을 분석해서 자동완성을 함 - const dValue = Hangul.disassembleToString(value.replace(/\s/g, '')); - const regex = new RegExp(dValue); - const dList = this.props.list.map((data: Data) => ({ + const regex = new RegExp(disassemble(keyword)); + return list.map((data: Data) => ({ ...data, - match: regex.exec( - Hangul.disassembleToString(data.name.replace(/\s/g, '')) - ), + match: regex.exec(disassemble(data.name)), })); - const filter = dList.filter(data => data.match !== null); - return sortBy(filter, data => 1 - Math.pow(1.4, -data.match[0].length)); }; - handleTextChange = (keyword: string) => { - const { handleChange } = this.props; - const autocomplete = this.getAutocomplete(keyword); + handleTextChange = async (keyword: string) => { + const { staticList, defaultList, onSearch } = this.props; + let autocomplete: Data[] = defaultList || []; + if (disassemble(keyword).length > 4) { + let result: Data[] = []; + if (staticList !== undefined) { + result = this.getAutocomplete(keyword, staticList); + } else if (onSearch !== undefined) { + if (this.searchResult === undefined) { + this.searchResult = await onSearch(keyword); + } + result = this.getAutocomplete(keyword, this.searchResult); + } + const filter = result.filter(data => data.match !== null); + autocomplete = sortBy( + filter, + data => 1 - Math.pow(1.4, -data.match[0].length) + ); + } else if (this.searchResult !== undefined) { + delete this.searchResult; + } this.setState({ keyword, autocomplete }); - if (handleChange) handleChange(keyword.trim()); }; - render() { - const { - placeholder, - handleDismiss, - handleSubmit, - icon, - defaultList = [], - } = this.props; - const list = - this.state.autocomplete.length > 0 - ? this.state.autocomplete - : defaultList; + handleInputSubmit = async () => { + const { onSearch } = this.props; + const { keyword } = this.state; + if (onSearch && keyword.length !== 0) { + this.searchResult = await onSearch(keyword); + const autocomplete = this.getAutocomplete(keyword, this.searchResult); + this.setState({ autocomplete }); + } + }; + render() { + const { placeholder, onDismiss, onSubmit, icon } = this.props; return ( { source={require('src/assets/icons/ic_close.png')} /> ), - handlePress: handleDismiss, + handlePress: onDismiss, }} /> + {this.state.keyword.length > 0 && ( + { + if (this.input.current) this.input.current.clear(); + }}> + + + )} index.toString()} renderItem={data => ( )} /> diff --git a/src/components/module/TextInput/TextInput.styles.ts b/src/components/module/TextInput/TextInput.styles.ts index c08355b6..461a1024 100644 --- a/src/components/module/TextInput/TextInput.styles.ts +++ b/src/components/module/TextInput/TextInput.styles.ts @@ -24,5 +24,5 @@ export const inputs = StyleSheet.create({ fontSize: font.size.medium, }, focused: { borderColor: color.blue }, - unFocused: { borderColor: color.grayDA }, + unFocused: { borderColor: color.grayEF }, }); diff --git a/src/components/module/TopNavbar/TopNavbar.tsx b/src/components/module/TopNavbar/TopNavbar.tsx index 8fe28ad1..b0503205 100644 --- a/src/components/module/TopNavbar/TopNavbar.tsx +++ b/src/components/module/TopNavbar/TopNavbar.tsx @@ -17,19 +17,19 @@ interface Props { view: ReactNode; handlePress: () => void; }; - center?: string; + center?: string | ReactNode; showBorder?: boolean; transparent?: boolean; } const { width } = Dimensions.get('window'); -export const height = 45; +export const height = 55; const styles = StyleSheet.create({ wrapper: { height, width: '100%', flexDirection: 'row', - borderBottomColor: '#70707014', + borderBottomColor: '#EBEBEB', }, button: { paddingHorizontal: width * 0.04, @@ -63,11 +63,14 @@ const TopNavbar: React.FC = ({ showBorder ? { borderBottomWidth: 1 } : null, { backgroundColor: transparent ? 'transparent' : color.white }, ]}> - {center && ( - - {center} - - )} + {center && + (typeof center === 'string' ? ( + + {center} + + ) : ( + center + ))} {left && ( void; - detail?: { + hideModal: () => void; + data?: { title: string; link: string; }; } -const Detail: React.FC = ({ hideDetail, detail }) => ( +const Detail: React.FC = ({ hideModal, data }) => ( - {detail && ( + animationType="slide" + hardwareAccelerated + onRequestClose={hideModal}> + {data && ( = ({ hideDetail, detail }) => ( /> ), }} - center={detail.title} + center={data.title} showBorder={true} /> - + )} diff --git a/src/components/module/WebModal/index.ts b/src/components/module/WebModal/index.ts new file mode 100644 index 00000000..81964fd0 --- /dev/null +++ b/src/components/module/WebModal/index.ts @@ -0,0 +1 @@ +export { default } from './WebModal'; diff --git a/src/pages/App/Profile/Profile.tsx b/src/pages/App/Profile/Profile.tsx deleted file mode 100644 index 3753e8e1..00000000 --- a/src/pages/App/Profile/Profile.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react'; -import { Button, View } from 'react-native'; -import { NavigationScreenProps } from 'react-navigation'; -import { connect } from 'react-redux'; -import * as actions from 'src/store/actions/user'; - -interface Props extends NavigationScreenProps { - signOut: typeof actions.signOut; -} - -const Profile: React.FC = ({ navigation, signOut }) => { - function handleSignOut() { - signOut(navigation); - } - - return ( - -