Compare commits
21 Commits
develop
...
whitelabel
Author | SHA1 | Date |
---|---|---|
Diego Mello | 518e56379d | |
Diego Mello | 399948156c | |
Diego Mello | 2b046a2854 | |
Diego Mello | 2ad588088c | |
Diego Mello | 87468610e3 | |
Diego Mello | 183a182c93 | |
Diego Mello | ff99da7647 | |
Diego Mello | 8e30907828 | |
Diego Mello | c88879ea4b | |
Diego Mello | 19d726d7c0 | |
Diego Mello | c53f05bcfd | |
Diego Mello | 5acc509dfe | |
Diego Mello | 9e45600dd2 | |
Diego Mello | f36fe466cf | |
Diego Mello | 3d15408396 | |
Diego Mello | f1fb77bf78 | |
Diego Mello | 91ef492e94 | |
Diego Mello | 1a4161ea9c | |
Diego Mello | 26209a197e | |
Diego Mello | 2e740eeb96 | |
Diego Mello | 6e66897089 |
|
@ -1,2 +0,0 @@
|
||||||
BUNDLE_PATH: "vendor/bundle"
|
|
||||||
BUNDLE_FORCE_RUBY_PLATFORM: 1
|
|
1017
.circleci/config.yml
91
.detoxrc.js
|
@ -1,91 +0,0 @@
|
||||||
/** @type {Detox.DetoxConfig} */
|
|
||||||
module.exports = {
|
|
||||||
testRunner: {
|
|
||||||
args: {
|
|
||||||
$0: 'jest',
|
|
||||||
config: 'e2e/jest.config.js'
|
|
||||||
},
|
|
||||||
retries: process.env.CI ? 3 : 0
|
|
||||||
},
|
|
||||||
artifacts: {
|
|
||||||
plugins: {
|
|
||||||
screenshot: 'failing',
|
|
||||||
video: 'failing',
|
|
||||||
uiHierarchy: 'enabled'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
apps: {
|
|
||||||
'ios.debug': {
|
|
||||||
type: 'ios.app',
|
|
||||||
binaryPath: 'ios/build/Build/Products/Debug-iphonesimulator/Rocket.Chat Experimental.app',
|
|
||||||
build:
|
|
||||||
'xcodebuild -workspace ios/RocketChatRN.xcworkspace -scheme RocketChatRN -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build'
|
|
||||||
},
|
|
||||||
'ios.release': {
|
|
||||||
type: 'ios.app',
|
|
||||||
binaryPath: 'ios/build/Build/Products/Release-iphonesimulator/Rocket.Chat Experimental.app',
|
|
||||||
build:
|
|
||||||
'xcodebuild -workspace ios/RocketChatRN.xcworkspace -scheme RocketChatRN -configuration Release -sdk iphonesimulator -derivedDataPath ios/build'
|
|
||||||
},
|
|
||||||
'android.debug': {
|
|
||||||
type: 'android.apk',
|
|
||||||
binaryPath: 'android/app/build/outputs/apk/experimentalPlay/debug/app-experimental-play-debug.apk',
|
|
||||||
build:
|
|
||||||
'cd android ; ./gradlew assembleExperimentalPlayDebug assembleExperimentalPlayDebugAndroidTest -DtestBuildType=debug ; cd -',
|
|
||||||
reversePorts: [8081]
|
|
||||||
},
|
|
||||||
'android.release': {
|
|
||||||
type: 'android.apk',
|
|
||||||
binaryPath: 'android/app/build/outputs/apk/experimentalPlay/release/app-experimental-play-release.apk',
|
|
||||||
build:
|
|
||||||
'cd android ; ./gradlew assembleExperimentalPlayRelease assembleExperimentalPlayReleaseAndroidTest -DtestBuildType=release ; cd -'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
devices: {
|
|
||||||
simulator: {
|
|
||||||
type: 'ios.simulator',
|
|
||||||
device: {
|
|
||||||
type: 'iPhone 14'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
attached: {
|
|
||||||
type: 'android.attached',
|
|
||||||
device: {
|
|
||||||
adbName: '.*'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
emulator: {
|
|
||||||
type: 'android.emulator',
|
|
||||||
device: {
|
|
||||||
avdName: 'Pixel_API_31_AOSP'
|
|
||||||
},
|
|
||||||
headless: process.env.CI ? true : false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
configurations: {
|
|
||||||
'ios.sim.debug': {
|
|
||||||
device: 'simulator',
|
|
||||||
app: 'ios.debug'
|
|
||||||
},
|
|
||||||
'ios.sim.release': {
|
|
||||||
device: 'simulator',
|
|
||||||
app: 'ios.release'
|
|
||||||
},
|
|
||||||
'android.att.debug': {
|
|
||||||
device: 'attached',
|
|
||||||
app: 'android.debug'
|
|
||||||
},
|
|
||||||
'android.att.release': {
|
|
||||||
device: 'attached',
|
|
||||||
app: 'android.release'
|
|
||||||
},
|
|
||||||
'android.emu.debug': {
|
|
||||||
device: 'emulator',
|
|
||||||
app: 'android.debug'
|
|
||||||
},
|
|
||||||
'android.emu.release': {
|
|
||||||
device: 'emulator',
|
|
||||||
app: 'android.release'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,7 +1,6 @@
|
||||||
__tests__
|
__tests__
|
||||||
node_modules
|
node_modules
|
||||||
coverage
|
coverage
|
||||||
e2e/docker
|
e2e
|
||||||
android
|
android
|
||||||
ios
|
ios
|
||||||
.eslintrc.js
|
|
375
.eslintrc.js
|
@ -1,248 +1,139 @@
|
||||||
module.exports = {
|
module.exports = {
|
||||||
settings: {
|
"settings": {
|
||||||
'import/resolver': {
|
"import/resolver": {
|
||||||
node: {
|
"node": {
|
||||||
extensions: ['.ts', '.tsx', '.js', '.ios.js', '.android.js', '.native.js', '.ios.tsx', '.android.tsx']
|
"extensions": [".js", ".ios.js", ".android.js", ".native.js", ".tsx"]
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parser": "babel-eslint",
|
||||||
|
"extends": "airbnb",
|
||||||
|
"parserOptions": {
|
||||||
|
"sourceType": "module",
|
||||||
|
"ecmaVersion": 2017,
|
||||||
|
"ecmaFeatures": {
|
||||||
|
"experimentalObjectRestSpread" : true,
|
||||||
|
"jsx": true,
|
||||||
|
"legacyDecorators": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
parser: '@babel/eslint-parser',
|
"plugins": [
|
||||||
extends: ['@rocket.chat/eslint-config', 'prettier'],
|
"react",
|
||||||
parserOptions: {
|
"jsx-a11y",
|
||||||
sourceType: 'module',
|
"import",
|
||||||
ecmaVersion: 2017,
|
"react-native"
|
||||||
ecmaFeatures: {
|
],
|
||||||
experimentalObjectRestSpread: true,
|
"env": {
|
||||||
jsx: true,
|
"browser": true,
|
||||||
legacyDecorators: true
|
"commonjs": true,
|
||||||
}
|
"es6": true,
|
||||||
|
"node": true,
|
||||||
|
"jquery": true
|
||||||
},
|
},
|
||||||
plugins: ['react', 'jsx-a11y', 'import', 'react-native', '@babel', 'jest', 'react-hooks'],
|
"rules": {
|
||||||
env: {
|
"react/jsx-filename-extension": [1, {
|
||||||
browser: true,
|
"extensions": [".js", ".jsx"]
|
||||||
commonjs: true,
|
}],
|
||||||
es6: true,
|
"react/require-default-props": [0],
|
||||||
node: true,
|
"react/no-unused-prop-types": [2, {
|
||||||
jquery: true,
|
"skipShapeProps": true
|
||||||
mocha: true,
|
}],
|
||||||
'jest/globals': true
|
"react/no-did-mount-set-state": 0,
|
||||||
|
"react/no-multi-comp": [0],
|
||||||
|
"react/jsx-indent": [2, "tab"],
|
||||||
|
"react/jsx-indent-props": [2, "tab"],
|
||||||
|
"react/forbid-prop-types": 0,
|
||||||
|
"jsx-quotes": [2, "prefer-single"],
|
||||||
|
"jsx-a11y/href-no-hash": 0,
|
||||||
|
"import/prefer-default-export": 0,
|
||||||
|
"import/no-cycle": 0,
|
||||||
|
"camelcase": 0,
|
||||||
|
"no-underscore-dangle": 0,
|
||||||
|
"no-return-assign": 0,
|
||||||
|
"no-param-reassign": 0,
|
||||||
|
"no-tabs": 0,
|
||||||
|
"no-multi-spaces": 2,
|
||||||
|
"no-eval": 2,
|
||||||
|
"no-extend-native": 2,
|
||||||
|
"no-multi-str": 2,
|
||||||
|
"no-use-before-define": 2,
|
||||||
|
"no-const-assign": 2,
|
||||||
|
"no-cond-assign": 2,
|
||||||
|
"no-constant-condition": 2,
|
||||||
|
"no-control-regex": 2,
|
||||||
|
"no-debugger": 2,
|
||||||
|
"no-delete-var": 2,
|
||||||
|
"no-dupe-keys": 2,
|
||||||
|
"no-dupe-args": 2,
|
||||||
|
"no-dupe-class-members": 2,
|
||||||
|
"no-duplicate-case": 2,
|
||||||
|
"no-else-return": [0, {allowElseIf: true}],
|
||||||
|
"no-empty": 2,
|
||||||
|
"no-empty-character-class": 2,
|
||||||
|
"no-ex-assign": 2,
|
||||||
|
"no-extra-boolean-cast": 2,
|
||||||
|
"no-extra-semi": 2,
|
||||||
|
"no-fallthrough": 2,
|
||||||
|
"no-func-assign": 2,
|
||||||
|
"no-inner-declarations": [2, "functions"],
|
||||||
|
"no-invalid-regexp": 2,
|
||||||
|
"no-irregular-whitespace": 2,
|
||||||
|
"no-mixed-spaces-and-tabs": 2,
|
||||||
|
"no-sparse-arrays": 2,
|
||||||
|
"no-negated-in-lhs": 2,
|
||||||
|
"no-obj-calls": 2,
|
||||||
|
"no-octal": 2,
|
||||||
|
"no-redeclare": 2,
|
||||||
|
"no-regex-spaces": 2,
|
||||||
|
"no-undef": 2,
|
||||||
|
"no-unreachable": 2,
|
||||||
|
"no-unused-vars": [2, {
|
||||||
|
"vars": "all",
|
||||||
|
"args": "after-used"
|
||||||
|
}],
|
||||||
|
"max-len": 0,
|
||||||
|
"react/jsx-uses-vars": 2,
|
||||||
|
"no-void": 2,
|
||||||
|
"no-var": 2,
|
||||||
|
"one-var": [2, "never"],
|
||||||
|
"no-lonely-if": 2,
|
||||||
|
"no-trailing-spaces": 2,
|
||||||
|
"complexity": [1, 31],
|
||||||
|
"space-in-parens": [2, "never"],
|
||||||
|
"space-before-function-paren": [2, "never"],
|
||||||
|
"space-before-blocks": [2, "always"],
|
||||||
|
"indent": [2, "tab", {"SwitchCase": 1}],
|
||||||
|
"eol-last": [2, "always"],
|
||||||
|
"comma-dangle": [2, "never"],
|
||||||
|
"keyword-spacing": 2,
|
||||||
|
"block-spacing": 2,
|
||||||
|
"brace-style": [2, "1tbs", { "allowSingleLine": true }],
|
||||||
|
"computed-property-spacing": 2,
|
||||||
|
"comma-spacing": 2,
|
||||||
|
"comma-style": 2,
|
||||||
|
"guard-for-in": 2,
|
||||||
|
"wrap-iife": 2,
|
||||||
|
"block-scoped-var": 2,
|
||||||
|
"curly": [2, "all"],
|
||||||
|
"eqeqeq": [2, "allow-null"],
|
||||||
|
"new-cap": [2],
|
||||||
|
"use-isnan": 2,
|
||||||
|
"valid-typeof": 2,
|
||||||
|
"linebreak-style": 0,
|
||||||
|
"prefer-template": 2,
|
||||||
|
"template-curly-spacing": [2, "always"],
|
||||||
|
"quotes": [2, "single"],
|
||||||
|
"semi": [2, "always"],
|
||||||
|
"prefer-const": 2,
|
||||||
|
"object-shorthand": 2,
|
||||||
|
"consistent-return": 0,
|
||||||
|
"global-require": "off",
|
||||||
|
"react-native/no-unused-styles": 2,
|
||||||
|
"react/jsx-one-expression-per-line": 0,
|
||||||
|
"require-await": 2,
|
||||||
|
"func-names": 0
|
||||||
},
|
},
|
||||||
rules: {
|
"globals": {
|
||||||
'import/extensions': [
|
"__DEV__": true
|
||||||
'error',
|
}
|
||||||
'ignorePackages',
|
|
||||||
{
|
|
||||||
js: 'warning',
|
|
||||||
jsx: 'warning',
|
|
||||||
ts: 'warning',
|
|
||||||
tsx: 'warning'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'react/jsx-filename-extension': [
|
|
||||||
1,
|
|
||||||
{
|
|
||||||
extensions: ['.js', '.jsx', '.ts', '.tsx']
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'react/require-default-props': [0],
|
|
||||||
'ordered-imports': [0],
|
|
||||||
'react/no-did-mount-set-state': 0,
|
|
||||||
'react/no-multi-comp': [0],
|
|
||||||
'react/jsx-indent-props': [2, 'tab'],
|
|
||||||
'jsx-quotes': [2, 'prefer-single'],
|
|
||||||
'jsx-a11y/href-no-hash': 0,
|
|
||||||
'jsx-a11y/aria-role': 0,
|
|
||||||
'import/prefer-default-export': 0,
|
|
||||||
'import/no-cycle': 0,
|
|
||||||
'import/order': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
'newlines-between': 'ignore'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
camelcase: 0,
|
|
||||||
'no-underscore-dangle': 0,
|
|
||||||
'no-return-assign': 0,
|
|
||||||
'no-param-reassign': 0,
|
|
||||||
'no-tabs': 0,
|
|
||||||
'no-multi-spaces': 2,
|
|
||||||
'no-eval': 2,
|
|
||||||
'no-extend-native': 2,
|
|
||||||
'no-multi-str': 2,
|
|
||||||
'no-use-before-define': 2,
|
|
||||||
'no-const-assign': 2,
|
|
||||||
'no-cond-assign': 2,
|
|
||||||
'no-constant-condition': 2,
|
|
||||||
'no-control-regex': 2,
|
|
||||||
'no-debugger': 2,
|
|
||||||
'no-delete-var': 2,
|
|
||||||
'no-dupe-keys': 2,
|
|
||||||
'no-dupe-args': 2,
|
|
||||||
'no-dupe-class-members': 2,
|
|
||||||
'no-duplicate-case': 2,
|
|
||||||
'no-else-return': [0, { allowElseIf: true }],
|
|
||||||
'no-empty': 2,
|
|
||||||
'no-empty-character-class': 2,
|
|
||||||
'no-ex-assign': 2,
|
|
||||||
'no-extra-boolean-cast': 2,
|
|
||||||
'no-extra-semi': 2,
|
|
||||||
'no-fallthrough': 2,
|
|
||||||
'no-func-assign': 2,
|
|
||||||
'no-inner-declarations': [2, 'functions'],
|
|
||||||
'no-invalid-regexp': 2,
|
|
||||||
'no-irregular-whitespace': 2,
|
|
||||||
'no-mixed-spaces-and-tabs': 1,
|
|
||||||
'no-sparse-arrays': 2,
|
|
||||||
'no-negated-in-lhs': 2,
|
|
||||||
'no-obj-calls': 2,
|
|
||||||
'no-octal': 2,
|
|
||||||
'no-redeclare': 2,
|
|
||||||
'no-regex-spaces': 2,
|
|
||||||
'no-undef': 2,
|
|
||||||
'no-unreachable': 2,
|
|
||||||
'no-unused-expressions': 0,
|
|
||||||
'no-unused-vars': 'off',
|
|
||||||
'max-len': 0,
|
|
||||||
'react/jsx-uses-vars': 2,
|
|
||||||
'no-void': 2,
|
|
||||||
'no-var': 2,
|
|
||||||
'one-var': [2, 'never'],
|
|
||||||
'no-lonely-if': 2,
|
|
||||||
'no-trailing-spaces': 2,
|
|
||||||
complexity: [1, 31],
|
|
||||||
'space-in-parens': [2, 'never'],
|
|
||||||
'space-before-blocks': [2, 'always'],
|
|
||||||
indent: 'off',
|
|
||||||
'eol-last': [2, 'always'],
|
|
||||||
'comma-dangle': [2, 'never'],
|
|
||||||
'keyword-spacing': 2,
|
|
||||||
'block-spacing': 2,
|
|
||||||
'brace-style': [2, '1tbs', { allowSingleLine: true }],
|
|
||||||
'computed-property-spacing': 2,
|
|
||||||
'comma-spacing': 2,
|
|
||||||
'comma-style': 2,
|
|
||||||
'guard-for-in': 2,
|
|
||||||
'wrap-iife': 2,
|
|
||||||
'block-scoped-var': 2,
|
|
||||||
curly: [2, 'all'],
|
|
||||||
eqeqeq: [2, 'allow-null'],
|
|
||||||
'new-cap': 'off',
|
|
||||||
'use-isnan': 2,
|
|
||||||
'valid-typeof': 2,
|
|
||||||
'linebreak-style': 0,
|
|
||||||
'prefer-template': 2,
|
|
||||||
quotes: [1, 'single'],
|
|
||||||
semi: [2, 'always'],
|
|
||||||
'prefer-const': 2,
|
|
||||||
'object-shorthand': 2,
|
|
||||||
'consistent-return': 0,
|
|
||||||
'global-require': 'off',
|
|
||||||
'react-native/no-unused-styles': 2,
|
|
||||||
'react/jsx-one-expression-per-line': 0,
|
|
||||||
'require-await': 2,
|
|
||||||
'func-names': 0,
|
|
||||||
'react/static-property-placement': [0],
|
|
||||||
'arrow-parens': ['warn', 'as-needed', { requireForBlockBody: true }],
|
|
||||||
'react/jsx-curly-newline': [0],
|
|
||||||
'react/state-in-constructor': [0],
|
|
||||||
'no-async-promise-executor': [0],
|
|
||||||
'max-classes-per-file': [0],
|
|
||||||
'no-multiple-empty-lines': [0],
|
|
||||||
'no-sequences': 'off',
|
|
||||||
'react-hooks/rules-of-hooks': 'error',
|
|
||||||
'react-hooks/exhaustive-deps': 'warn'
|
|
||||||
},
|
|
||||||
globals: {
|
|
||||||
__DEV__: true
|
|
||||||
},
|
|
||||||
overrides: [
|
|
||||||
{
|
|
||||||
files: ['**/*.ts', '**/*.tsx'],
|
|
||||||
extends: [
|
|
||||||
'plugin:@typescript-eslint/recommended',
|
|
||||||
'plugin:@typescript-eslint/eslint-recommended',
|
|
||||||
'@rocket.chat/eslint-config',
|
|
||||||
'prettier'
|
|
||||||
],
|
|
||||||
parser: '@typescript-eslint/parser',
|
|
||||||
parserOptions: {
|
|
||||||
sourceType: 'module',
|
|
||||||
ecmaVersion: 2018,
|
|
||||||
warnOnUnsupportedTypeScriptVersion: false,
|
|
||||||
ecmaFeatures: {
|
|
||||||
experimentalObjectRestSpread: true,
|
|
||||||
legacyDecorators: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
plugins: ['react', '@typescript-eslint'],
|
|
||||||
rules: {
|
|
||||||
'@typescript-eslint/no-var-requires': 'off',
|
|
||||||
'@typescript-eslint/no-empty-function': [0],
|
|
||||||
'@typescript-eslint/ban-types': [0],
|
|
||||||
'func-call-spacing': 'off',
|
|
||||||
'jsx-quotes': ['error', 'prefer-single'],
|
|
||||||
indent: 'off',
|
|
||||||
'comma-dangle': [2, 'never'],
|
|
||||||
'no-return-assign': 0,
|
|
||||||
'no-dupe-class-members': 'off',
|
|
||||||
'no-extra-parens': 'off',
|
|
||||||
'no-spaced-func': 'off',
|
|
||||||
'no-unused-vars': 'off',
|
|
||||||
'no-useless-constructor': 'off',
|
|
||||||
'no-use-before-define': 'off',
|
|
||||||
'react/jsx-uses-react': 'error',
|
|
||||||
'react/jsx-uses-vars': 'error',
|
|
||||||
'react/jsx-no-undef': 'error',
|
|
||||||
'react/jsx-fragments': ['error', 'syntax'],
|
|
||||||
'@typescript-eslint/ban-ts-comment': 'off',
|
|
||||||
'@typescript-eslint/indent': [
|
|
||||||
'warn',
|
|
||||||
'tab',
|
|
||||||
{
|
|
||||||
SwitchCase: 1
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'@typescript-eslint/no-extra-parens': [
|
|
||||||
'warn',
|
|
||||||
'all',
|
|
||||||
{
|
|
||||||
conditionalAssign: true,
|
|
||||||
nestedBinaryExpressions: false,
|
|
||||||
returnAssign: true,
|
|
||||||
ignoreJSX: 'all',
|
|
||||||
enforceForArrowConditionals: false
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'@typescript-eslint/no-dupe-class-members': 'error',
|
|
||||||
'@typescript-eslint/no-explicit-any': 'off',
|
|
||||||
'@typescript-eslint/no-unused-vars': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
argsIgnorePattern: '^_',
|
|
||||||
ignoreRestSiblings: true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'new-cap': 'off',
|
|
||||||
'lines-between-class-members': 'off',
|
|
||||||
'react-hooks/rules-of-hooks': 'error',
|
|
||||||
'react-hooks/exhaustive-deps': 'warn'
|
|
||||||
},
|
|
||||||
globals: {
|
|
||||||
JSX: true
|
|
||||||
},
|
|
||||||
settings: {
|
|
||||||
'import/resolver': {
|
|
||||||
node: {
|
|
||||||
extensions: ['.js', '.ts', '.tsx']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
files: ['e2e/**'],
|
|
||||||
rules: {
|
|
||||||
'no-await-in-loop': 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,38 +1,6 @@
|
||||||
<!--
|
- Your Rocket.Chat Experimental app version: ####
|
||||||
|
- Your Rocket.Chat server version: ####
|
||||||
|
- Device (or Simulator) you're running with: ####
|
||||||
|
|
||||||
Please see our guide for opening issues: https://rocket.chat/docs/contributing/reporting-issues
|
**The app isn't connecting to your server?**
|
||||||
|
Make sure your server supports WebSocket. These are the minimum requirements for Apache 2.4 and Nginx 1.3 or greater.
|
||||||
If you have questions or are looking for help/support please see: https://rocket.chat/docs/getting-support
|
|
||||||
|
|
||||||
If you are experiencing a bug please search our issues to be sure it is not already present: https://github.com/RocketChat/Rocket.Chat.ReactNative/issues
|
|
||||||
|
|
||||||
-->
|
|
||||||
|
|
||||||
### Description:
|
|
||||||
|
|
||||||
<!-- A clear and concise description of what the bug is. -->
|
|
||||||
|
|
||||||
### Environment Information:
|
|
||||||
|
|
||||||
- Rocket.Chat Server Version:
|
|
||||||
- Rocket.Chat App Version:
|
|
||||||
- Device Name:
|
|
||||||
- OS Version:
|
|
||||||
|
|
||||||
### Steps to reproduce:
|
|
||||||
|
|
||||||
1. <!-- Go to '...' -->
|
|
||||||
2. <!-- Click on '....' -->
|
|
||||||
3. <!-- and so on... -->
|
|
||||||
|
|
||||||
### Expected behavior:
|
|
||||||
|
|
||||||
<!-- What you expect to happen -->
|
|
||||||
|
|
||||||
### Actual behavior:
|
|
||||||
|
|
||||||
<!-- What actually happens with SCREENSHOT, if applicable -->
|
|
||||||
|
|
||||||
### Additional context:
|
|
||||||
|
|
||||||
<!-- Add any other context about the problem here. -->
|
|
||||||
|
|
|
@ -1,34 +1,7 @@
|
||||||
<!-- This is a pull request template, you do not need to uncomment or remove the comments, they won't show up in the PR text. -->
|
<!-- INSTRUCTION: Keep the line below to notify all core developers about this new PR -->
|
||||||
|
@RocketChat/ReactNative
|
||||||
|
|
||||||
## Proposed changes
|
<!-- INSTRUCTION: Inform the issue number that this PR closes, or remove the line below -->
|
||||||
<!-- Describe the big picture of your changes here to communicate to the maintainers why we should accept this pull request. If it fixes a bug or resolves a feature request, be sure to link to that issue below. -->
|
Closes #ISSUE_NUMBER
|
||||||
|
|
||||||
## Issue(s)
|
<!-- INSTRUCTION: Tell us more about your PR with screen shots if you can -->
|
||||||
<!-- Link the issues being closed by or related to this PR. For example, you can use #594 if this PR closes issue number 594 -->
|
|
||||||
|
|
||||||
## How to test or reproduce
|
|
||||||
<!-- Mention how you would reproduce the bug if not mentioned on the issue page already. Also mention which screens are going to have the changes if applicable -->
|
|
||||||
|
|
||||||
## Screenshots
|
|
||||||
|
|
||||||
## Types of changes
|
|
||||||
<!-- What types of changes does your code introduce to Rocket.Chat? -->
|
|
||||||
<!-- Put an `x` in the boxes that apply -->
|
|
||||||
|
|
||||||
- [ ] Bugfix (non-breaking change which fixes an issue)
|
|
||||||
- [ ] Improvement (non-breaking change which improves a current function)
|
|
||||||
- [ ] New feature (non-breaking change which adds functionality)
|
|
||||||
- [ ] Documentation update (if none of the other choices apply)
|
|
||||||
|
|
||||||
## Checklist
|
|
||||||
<!-- Put an `x` in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code. -->
|
|
||||||
|
|
||||||
- [ ] I have read the [CONTRIBUTING](https://github.com/RocketChat/Rocket.Chat/blob/develop/.github/CONTRIBUTING.md#contributing-to-rocketchat) doc
|
|
||||||
- [ ] I have signed the [CLA](https://cla-assistant.io/RocketChat/Rocket.Chat.ReactNative)
|
|
||||||
- [ ] Lint and unit tests pass locally with my changes
|
|
||||||
- [ ] I have added tests that prove my fix is effective or that my feature works (if applicable)
|
|
||||||
- [ ] I have added necessary documentation (if applicable)
|
|
||||||
- [ ] Any dependent changes have been merged and published in downstream modules
|
|
||||||
|
|
||||||
## Further comments
|
|
||||||
<!-- If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc... -->
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "npm"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "weekly"
|
|
||||||
open-pull-requests-limit: 25
|
|
|
@ -21,9 +21,6 @@ DerivedData
|
||||||
*.ipa
|
*.ipa
|
||||||
*.xcuserstate
|
*.xcuserstate
|
||||||
project.xcworkspace
|
project.xcworkspace
|
||||||
*.mobileprovision
|
|
||||||
ios/Pods/
|
|
||||||
/vendor/bundle/
|
|
||||||
|
|
||||||
# Android/IntelliJ
|
# Android/IntelliJ
|
||||||
#
|
#
|
||||||
|
@ -45,7 +42,6 @@ coverage/
|
||||||
buck-out/
|
buck-out/
|
||||||
\.buckd/
|
\.buckd/
|
||||||
*.keystore
|
*.keystore
|
||||||
*.jks
|
|
||||||
|
|
||||||
# fastlane
|
# fastlane
|
||||||
#
|
#
|
||||||
|
@ -54,19 +50,10 @@ buck-out/
|
||||||
# For more information about the recommended setup visit:
|
# For more information about the recommended setup visit:
|
||||||
# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
|
# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
|
||||||
|
|
||||||
**/fastlane/report.xml
|
fastlane/report.xml
|
||||||
**/fastlane/Preview.html
|
fastlane/Preview.html
|
||||||
**/fastlane/screenshots
|
fastlane/screenshots
|
||||||
**/fastlane/test_output
|
|
||||||
|
|
||||||
coverage
|
coverage
|
||||||
|
|
||||||
artifacts
|
|
||||||
.vscode/
|
.vscode/
|
||||||
e2e/docker/rc_test_env/docker-compose.yml
|
|
||||||
e2e/docker/data/db
|
|
||||||
e2e/e2e_account.js
|
|
||||||
e2e/e2e_account.ts
|
|
||||||
junit.xml
|
|
||||||
|
|
||||||
*.p8
|
|
|
@ -1 +0,0 @@
|
||||||
_
|
|
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
|
||||||
|
|
||||||
npm run precommit
|
|
|
@ -1,30 +0,0 @@
|
||||||
.circleci/
|
|
||||||
.github/
|
|
||||||
.husky
|
|
||||||
build/
|
|
||||||
node_modules/
|
|
||||||
coverage/
|
|
||||||
e2e/docker/
|
|
||||||
artifacts/
|
|
||||||
android/
|
|
||||||
ios/
|
|
||||||
patches/
|
|
||||||
scripts/
|
|
||||||
|
|
||||||
.bettercodehub.yml
|
|
||||||
.buckconfig
|
|
||||||
.gitattributes
|
|
||||||
.gitignore
|
|
||||||
.snyk
|
|
||||||
.watchmanconfig
|
|
||||||
CONTRIBUTING.md
|
|
||||||
README.md
|
|
||||||
SECURITY.md
|
|
||||||
npm-debug.log
|
|
||||||
yarn-error.log
|
|
||||||
|
|
||||||
.storybook/
|
|
||||||
|
|
||||||
app/i18n/locales/
|
|
||||||
app/containers/CustomIcon/mappedIcons.js
|
|
||||||
app/containers/CustomIcon/selection.json
|
|
|
@ -1,10 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
bracketSpacing: true,
|
|
||||||
singleQuote: true,
|
|
||||||
jsxSingleQuote: true,
|
|
||||||
trailingComma: 'none',
|
|
||||||
printWidth: 130,
|
|
||||||
useTabs: true,
|
|
||||||
arrowParens: 'avoid',
|
|
||||||
bracketSameLine: true
|
|
||||||
};
|
|
|
@ -1 +0,0 @@
|
||||||
2.7.7
|
|
|
@ -1,19 +0,0 @@
|
||||||
import { getStorybookUI } from '@storybook/react-native';
|
|
||||||
import './storybook.requires';
|
|
||||||
|
|
||||||
import RNBootSplash from 'react-native-bootsplash';
|
|
||||||
|
|
||||||
import { selectServerRequest } from '../app/actions/server';
|
|
||||||
import { mockedStore as store } from '../app/reducers/mockedStore';
|
|
||||||
import database from '../app/lib/database';
|
|
||||||
import { setUser } from '../app/actions/login';
|
|
||||||
|
|
||||||
RNBootSplash.hide();
|
|
||||||
|
|
||||||
const baseUrl = 'https://open.rocket.chat';
|
|
||||||
store.dispatch(selectServerRequest(baseUrl));
|
|
||||||
store.dispatch(setUser({ id: 'abc', username: 'rocket.cat', name: 'Rocket Cat' }));
|
|
||||||
database.setActiveDB(baseUrl);
|
|
||||||
|
|
||||||
const StorybookUIRoot = getStorybookUI({});
|
|
||||||
export default StorybookUIRoot;
|
|
|
@ -1,4 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
stories: ['../app/**/*.stories.?(ts|tsx|js|jsx)'],
|
|
||||||
addons: []
|
|
||||||
};
|
|
|
@ -1,40 +0,0 @@
|
||||||
import React from 'react';
|
|
||||||
import { Provider } from 'react-redux';
|
|
||||||
|
|
||||||
import { themes } from '../app/lib/constants';
|
|
||||||
import MessageContext from '../app/containers/message/Context';
|
|
||||||
import { selectServerRequest } from '../app/actions/server';
|
|
||||||
import { mockedStore as store } from '../app/reducers/mockedStore';
|
|
||||||
import { setUser } from '../app/actions/login';
|
|
||||||
|
|
||||||
const baseUrl = 'https://open.rocket.chat';
|
|
||||||
store.dispatch(selectServerRequest(baseUrl));
|
|
||||||
store.dispatch(setUser({ id: 'abc', username: 'rocket.cat', name: 'Rocket Cat' }));
|
|
||||||
|
|
||||||
export const decorators = [
|
|
||||||
Story => (
|
|
||||||
<Provider store={store}>
|
|
||||||
<MessageContext.Provider
|
|
||||||
value={{
|
|
||||||
user: {
|
|
||||||
id: 'y8bd77ptZswPj3EW8',
|
|
||||||
username: 'diego.mello',
|
|
||||||
token: 'abc'
|
|
||||||
},
|
|
||||||
baseUrl,
|
|
||||||
onPress: () => {},
|
|
||||||
onLongPress: () => {},
|
|
||||||
reactionInit: () => {},
|
|
||||||
onErrorPress: () => {},
|
|
||||||
replyBroadcast: () => {},
|
|
||||||
onReactionPress: () => {},
|
|
||||||
onDiscussionPress: () => {},
|
|
||||||
onReactionLongPress: () => {},
|
|
||||||
threadBadgeColor: themes.light.tunreadColor
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Story />
|
|
||||||
</MessageContext.Provider>
|
|
||||||
</Provider>
|
|
||||||
)
|
|
||||||
];
|
|
|
@ -1,50 +0,0 @@
|
||||||
/* do not change this file, it is auto generated by storybook. */
|
|
||||||
|
|
||||||
import {
|
|
||||||
configure,
|
|
||||||
addDecorator,
|
|
||||||
addParameters,
|
|
||||||
addArgsEnhancer,
|
|
||||||
} from "@storybook/react-native";
|
|
||||||
|
|
||||||
import { decorators, parameters } from "./preview";
|
|
||||||
|
|
||||||
if (decorators) {
|
|
||||||
decorators.forEach((decorator) => addDecorator(decorator));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parameters) {
|
|
||||||
addParameters(parameters);
|
|
||||||
}
|
|
||||||
|
|
||||||
const getStories = () => {
|
|
||||||
return [
|
|
||||||
require("../app/containers/Avatar/Avatar.stories.tsx"),
|
|
||||||
require("../app/containers/BackgroundContainer/index.stories.tsx"),
|
|
||||||
require("../app/containers/Button/Button.stories.tsx"),
|
|
||||||
require("../app/containers/Chip/Chip.stories.tsx"),
|
|
||||||
require("../app/containers/HeaderButton/HeaderButtons.stories.tsx"),
|
|
||||||
require("../app/containers/List/List.stories.tsx"),
|
|
||||||
require("../app/containers/LoginServices/LoginServices.stories.tsx"),
|
|
||||||
require("../app/containers/markdown/Markdown.stories.tsx"),
|
|
||||||
require("../app/containers/markdown/new/NewMarkdown.stories.tsx"),
|
|
||||||
require("../app/containers/message/Components/CollapsibleQuote/CollapsibleQuote.stories.tsx"),
|
|
||||||
require("../app/containers/message/Message.stories.tsx"),
|
|
||||||
require("../app/containers/ReactionsList/ReactionsList.stories.tsx"),
|
|
||||||
require("../app/containers/RoomHeader/RoomHeader.stories.tsx"),
|
|
||||||
require("../app/containers/RoomItem/RoomItem.stories.tsx"),
|
|
||||||
require("../app/containers/SearchBox/SearchBox.stories.tsx"),
|
|
||||||
require("../app/containers/ServerItem/ServerItem.stories.tsx"),
|
|
||||||
require("../app/containers/TextInput/TextInput.stories.tsx"),
|
|
||||||
require("../app/containers/UIKit/UiKitMessage.stories.tsx"),
|
|
||||||
require("../app/containers/UIKit/UiKitModal.stories.tsx"),
|
|
||||||
require("../app/containers/UnreadBadge/UnreadBadge.stories.tsx"),
|
|
||||||
require("../app/views/CannedResponsesListView/CannedResponseItem.stories.tsx"),
|
|
||||||
require("../app/views/CreateChannelView/RoomSettings/SwitchItem.stories.tsx"),
|
|
||||||
require("../app/views/DiscussionsView/Item.stories.tsx"),
|
|
||||||
require("../app/views/RoomView/LoadMore/LoadMore.stories.tsx"),
|
|
||||||
require("../app/views/ThreadMessagesView/Item.stories.tsx"),
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
configure(getStories, module, false);
|
|
|
@ -1,2 +0,0 @@
|
||||||
export const longText =
|
|
||||||
'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries';
|
|
|
@ -1,3 +1 @@
|
||||||
{
|
{}
|
||||||
"content_hash_max_items": 360000
|
|
||||||
}
|
|
110
CONTRIBUTING.md
|
@ -1,110 +0,0 @@
|
||||||
# Contributing Guidelines
|
|
||||||
|
|
||||||
Great to have you here! Here are a few ways you can help make this project better!
|
|
||||||
|
|
||||||
## Setting up a development environment
|
|
||||||
|
|
||||||
Refer to [React Native environment setup](https://reactnative.dev/docs/environment-setup) to make sure everything is up and running.
|
|
||||||
Follow the `React Native CLI Quickstart` section as we don't support Expo managed flow.
|
|
||||||
|
|
||||||
*Note: you'll need a MacOS to run iOS apps*
|
|
||||||
|
|
||||||
### How to run
|
|
||||||
|
|
||||||
Clone repository and install dependencies:
|
|
||||||
```sh
|
|
||||||
git clone git@github.com:RocketChat/Rocket.Chat.ReactNative.git
|
|
||||||
cd Rocket.Chat.ReactNative
|
|
||||||
yarn
|
|
||||||
```
|
|
||||||
|
|
||||||
Run the app:
|
|
||||||
```sh
|
|
||||||
npx pod-install
|
|
||||||
yarn ios
|
|
||||||
```
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
```sh
|
|
||||||
yarn android
|
|
||||||
```
|
|
||||||
|
|
||||||
At this point, the app should be running on the simulator or on your device!
|
|
||||||
|
|
||||||
*Note: npm won't work on this project*
|
|
||||||
|
|
||||||
### How to inspect the app
|
|
||||||
|
|
||||||
We use [Reactotron](https://github.com/infinitered/reactotron) to inspect logs, redux state, redux-sagas, HTTP requests, etc.
|
|
||||||
|
|
||||||
## Issues needing help
|
|
||||||
|
|
||||||
Didn't find a bug or want a new feature not already reported? Check out the [help wanted](https://github.com/RocketChat/Rocket.Chat.ReactNative/issues?q=is%3Aissue+is%3Aopen+label%3A%22%F0%9F%91%8B+help+wanted%22) or the [good first issue](https://github.com/RocketChat/Rocket.Chat.ReactNative/issues?q=is%3Aissue+is%3Aopen+label%3A%22%F0%9F%8D%AD+good+first+issue%22) labels.
|
|
||||||
|
|
||||||
Can't help coding? Triaging issues is a **great** way of helping.
|
|
||||||
|
|
||||||
## Code style
|
|
||||||
|
|
||||||
We use [ESLint](https://eslint.org/) to enforce code style and best practices. We have a pre-commit hook enforcing commits to follow our lint rules.
|
|
||||||
|
|
||||||
To check for lint issues on your code, run this on your terminal:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
yarn lint
|
|
||||||
```
|
|
||||||
|
|
||||||
## Code formatting
|
|
||||||
|
|
||||||
We use [Prettier](https://prettier.io) to format the code style in our project. We have a pre-commit hook enforcing commits to follow our style guides.
|
|
||||||
|
|
||||||
To fix your code formatting issues, run this on your terminal:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
yarn prettier
|
|
||||||
```
|
|
||||||
|
|
||||||
[Check this link](https://prettier.io/docs/en/editors.html) to see how to integrate Prettier with your preferred code editor, and run Prettier when save your file for example.
|
|
||||||
|
|
||||||
## Tests
|
|
||||||
|
|
||||||
It's always important to ensure everything is working properly and that's why tests are great. We have unit and e2e tests on this project.
|
|
||||||
|
|
||||||
### Unit tests
|
|
||||||
|
|
||||||
We use [Jest](https://jestjs.io/) and [Storybook](https://storybook.js.org/) on our tests.
|
|
||||||
|
|
||||||
#### Storybook
|
|
||||||
|
|
||||||
Storybook is a tool for developing UI Components and has some plugins to make Jest generate snapshots of them.
|
|
||||||
|
|
||||||
[On the root of the project](https://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/index.js#L24), comment everything leaving only the last import to Storybook left and refresh your project.
|
|
||||||
You'll see some tests like this:
|
|
||||||
|
|
||||||
<img src="https://user-images.githubusercontent.com/804994/89677725-56393200-d8c4-11ea-84b0-213be1d24e98.png" width="350" />
|
|
||||||
|
|
||||||
#### Jest
|
|
||||||
|
|
||||||
We use Jest for our unit tests and to generate Storybook snapshots. We have a pre-commit hook enforcing preventing commits that breaks any test.
|
|
||||||
|
|
||||||
To check for test issues on your code, run this on your terminal:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
yarn test
|
|
||||||
```
|
|
||||||
|
|
||||||
### E2E tests
|
|
||||||
|
|
||||||
We use [Detox](https://github.com/wix/Detox) framework to end-to-end test our app and ensure everything is working properly.
|
|
||||||
|
|
||||||
[Follow this documentation to learn how to run it](https://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/e2e).
|
|
||||||
|
|
||||||
### Pull request
|
|
||||||
|
|
||||||
As soon as your changes are ready, you can open a Pull Request.
|
|
||||||
|
|
||||||
The title of your PR should be descriptive, including either [NEW], [IMPROVEMENT] or [FIX] at the beginning, e.g. [FIX] App crashing on startup.
|
|
||||||
|
|
||||||
You may share working results prior to finishing, please include [WIP] in the title. This way anyone can look at your code: you can ask for help within the PR if you don't know how to solve a problem.
|
|
||||||
|
|
||||||
Your PR is automatically inspected by various tools, check their response and try to improve your code accordingly. Requests that fail to build or have wrong coding style won't be merged.
|
|
4
Gemfile
|
@ -1,4 +0,0 @@
|
||||||
source 'https://rubygems.org'
|
|
||||||
# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
|
|
||||||
ruby '2.7.7'
|
|
||||||
gem 'cocoapods', '~> 1.11', '>= 1.11.2'
|
|
225
README.md
|
@ -5,12 +5,11 @@
|
||||||
[![codecov](https://codecov.io/gh/RocketChat/Rocket.Chat.ReactNative/branch/master/graph/badge.svg)](https://codecov.io/gh/RocketChat/Rocket.Chat.ReactNative)
|
[![codecov](https://codecov.io/gh/RocketChat/Rocket.Chat.ReactNative/branch/master/graph/badge.svg)](https://codecov.io/gh/RocketChat/Rocket.Chat.ReactNative)
|
||||||
[![CodeFactor](https://www.codefactor.io/repository/github/rocketchat/rocket.chat.reactnative/badge)](https://www.codefactor.io/repository/github/rocketchat/rocket.chat.reactnative)
|
[![CodeFactor](https://www.codefactor.io/repository/github/rocketchat/rocket.chat.reactnative/badge)](https://www.codefactor.io/repository/github/rocketchat/rocket.chat.reactnative)
|
||||||
|
|
||||||
- **Supported server versions:** 0.70.0+
|
**Supported Server Versions:** 0.70.0+
|
||||||
- **Supported iOS versions**: 12+
|
|
||||||
- **Supported Android versions**: 6.0+
|
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
|
### Official apps
|
||||||
<a href="https://play.google.com/store/apps/details?id=chat.rocket.android">
|
<a href="https://play.google.com/store/apps/details?id=chat.rocket.android">
|
||||||
<img alt="Download on Google Play" src="https://play.google.com/intl/en_us/badges/images/badge_new.png" height=43>
|
<img alt="Download on Google Play" src="https://play.google.com/intl/en_us/badges/images/badge_new.png" height=43>
|
||||||
</a>
|
</a>
|
||||||
|
@ -18,7 +17,29 @@
|
||||||
<img alt="Download on App Store" src="https://user-images.githubusercontent.com/7317008/43209852-4ca39622-904b-11e8-8ce1-cdc3aee76ae9.png" height=43>
|
<img alt="Download on App Store" src="https://user-images.githubusercontent.com/7317008/43209852-4ca39622-904b-11e8-8ce1-cdc3aee76ae9.png" height=43>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
Check [our docs](https://docs.rocket.chat/installation/mobile-and-desktop-apps#mobile-apps) for beta and Experimental versions.
|
### Experimental apps
|
||||||
|
<a href="https://play.google.com/store/apps/details?id=chat.rocket.reactnative">
|
||||||
|
<img alt="Download on Google Play" src="https://play.google.com/intl/en_us/badges/images/badge_new.png" height=43>
|
||||||
|
</a>
|
||||||
|
<a href="https://itunes.apple.com/us/app/rocket-chat-experimental/id1272915472">
|
||||||
|
<img alt="Download on App Store" src="https://user-images.githubusercontent.com/7317008/43209852-4ca39622-904b-11e8-8ce1-cdc3aee76ae9.png" height=43>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
## Beta Access
|
||||||
|
|
||||||
|
### TestFlight
|
||||||
|
|
||||||
|
You can signup to our TestFlight builds by accessing these links:
|
||||||
|
|
||||||
|
- Official: https://testflight.apple.com/join/3gcYeoMr
|
||||||
|
- Experimental: https://testflight.apple.com/join/7I3dLCNT.
|
||||||
|
|
||||||
|
### Google Play beta
|
||||||
|
|
||||||
|
You can subscribe to Google Play Beta program and download latest versions:
|
||||||
|
|
||||||
|
- Official: https://play.google.com/store/apps/details?id=chat.rocket.android
|
||||||
|
- Experimental: https://play.google.com/store/apps/details?id=chat.rocket.reactnative
|
||||||
|
|
||||||
## Reporting an Issue
|
## Reporting an Issue
|
||||||
|
|
||||||
|
@ -26,16 +47,194 @@ Check [our docs](https://docs.rocket.chat/installation/mobile-and-desktop-apps#m
|
||||||
|
|
||||||
Also check the [#react-native](https://open.rocket.chat/channel/react-native) community on [open.rocket.chat](https://open.rocket.chat). We'd like to help.
|
Also check the [#react-native](https://open.rocket.chat/channel/react-native) community on [open.rocket.chat](https://open.rocket.chat). We'd like to help.
|
||||||
|
|
||||||
## Contributing
|
## Installing dependencies
|
||||||
|
|
||||||
Are you a dev and would like to help? Found a bug that you would like to report or a missing feature that you would like to work on? Great! We have written down a [Contribution guide](https://github.com/RocketChat/Rocket.Chat.ReactNative/blob/develop/CONTRIBUTING.md) so you can start easily.
|
Follow the [React Native Getting Started Guide](https://facebook.github.io/react-native/docs/getting-started.html) for detailed instructions on setting up your local machine for development.
|
||||||
|
|
||||||
## Whitelabel
|
## How to run
|
||||||
Do you want to make the app run on your own server only? [Follow our whitelabel documentation.](https://developer.rocket.chat/mobile-app/mobile-app-white-labelling)
|
- Clone repository and install dependencies:
|
||||||
|
```bash
|
||||||
|
$ git clone git@github.com:RocketChat/Rocket.Chat.ReactNative.git
|
||||||
|
$ cd Rocket.Chat.ReactNative
|
||||||
|
$ yarn global add react-native-cli
|
||||||
|
$ yarn
|
||||||
|
```
|
||||||
|
|
||||||
## Engage with us
|
- Run application
|
||||||
### Share your story
|
```bash
|
||||||
We’d love to hear about [your experience](https://survey.zohopublic.com/zs/e4BUFG) and potentially feature it on our [blog](https://rocket.chat/case-studies/?utm_source=github&utm_medium=readme&utm_campaign=community).
|
$ react-native run-ios
|
||||||
|
```
|
||||||
|
```bash
|
||||||
|
$ react-native run-android
|
||||||
|
```
|
||||||
|
|
||||||
### Subscribe for Updates
|
### Running single server
|
||||||
Once a month our marketing team releases an email update with news about product releases, company related topics, events and use cases. [Sign up!](https://rocket.chat/newsletter/?utm_source=github&utm_medium=readme&utm_campaign=community)
|
If you don't need multiple servers, there is a branch `single-server` just for that.
|
||||||
|
Readme will guide you on how to config.
|
||||||
|
|
||||||
|
## Current priorities
|
||||||
|
1) Omnichannel support
|
||||||
|
2) E2E encryption
|
||||||
|
|
||||||
|
## Features
|
||||||
|
| Feature | Status |
|
||||||
|
|--------------------------------------------------------------- |-------- |
|
||||||
|
| Jitsi Integration | ✅ |
|
||||||
|
| Federation (Directory) | ✅ |
|
||||||
|
| Discussions | ❌ |
|
||||||
|
| Omnichannel | ❌ |
|
||||||
|
| Threads | ✅ |
|
||||||
|
| Record Audio | ✅ |
|
||||||
|
| Record Video | ✅ |
|
||||||
|
| Commands | ✅ |
|
||||||
|
| Draft message per room | ✅ |
|
||||||
|
| Share Extension | ✅ |
|
||||||
|
| Notifications Preferences | ✅ |
|
||||||
|
| Edited status | ✅ |
|
||||||
|
| Upload video | ✅ |
|
||||||
|
| Grouped messages | ✅ |
|
||||||
|
| Mark room as read | ✅ |
|
||||||
|
| Mark room as unread | ✅ |
|
||||||
|
| Tablet Support | ✅ |
|
||||||
|
| Read receipt | ✅ |
|
||||||
|
| Broadbast Channel | ✅ |
|
||||||
|
| Authentication via SAML | ✅ |
|
||||||
|
| Authentication via CAS | ✅ |
|
||||||
|
| Custom Fields on Signup | ✅ |
|
||||||
|
| Report message | ✅ |
|
||||||
|
| Theming | ✅ |
|
||||||
|
| Settings -> Review the App | ✅ |
|
||||||
|
| Settings -> Default Browser | ✅ |
|
||||||
|
| Admin panel | ✅ |
|
||||||
|
| Reply message from notification | ✅ |
|
||||||
|
| Unread counter banner on message list | ✅ |
|
||||||
|
| E2E Encryption | ❌ |
|
||||||
|
| Join a Protected Room | ❌ |
|
||||||
|
| Optional Analytics | ✅ |
|
||||||
|
| Settings -> About us | ❌ |
|
||||||
|
| Settings -> Contact us | ✅ |
|
||||||
|
| Settings -> Update App Icon | ❌ |
|
||||||
|
| Settings -> Share | ✅ |
|
||||||
|
| Accessibility (Medium) | ❌ |
|
||||||
|
| Accessibility (Advanced) | ❌ |
|
||||||
|
| Authentication via Meteor | ❌ |
|
||||||
|
| Authentication via Wordpress | ✅ |
|
||||||
|
| Authentication via Custom OAuth | ✅ |
|
||||||
|
| Add user to the room | ✅ |
|
||||||
|
| Send message | ✅ |
|
||||||
|
| Authentication via Email | ✅ |
|
||||||
|
| Authentication via Username | ✅ |
|
||||||
|
| Authentication via LDAP | ✅ |
|
||||||
|
| Message format: Markdown | ✅ |
|
||||||
|
| Message format: System messages (Welcome, Message removed...) | ✅ |
|
||||||
|
| Message format: links | ✅ |
|
||||||
|
| Message format: images | ✅ |
|
||||||
|
| Message format: replies | ✅ |
|
||||||
|
| Message format: alias with custom message (title & text) | ✅ |
|
||||||
|
| Messages list: day separation | ✅ |
|
||||||
|
| Messages list: load more on scroll | ✅ |
|
||||||
|
| Messages list: receive new messages via subscription | ✅ |
|
||||||
|
| Subscriptions list | ✅ |
|
||||||
|
| Segmented subscriptions list: Favorites | ✅ |
|
||||||
|
| Segmented subscriptions list: Unreads | ✅ |
|
||||||
|
| Segmented subscriptions list: DMs | ✅ |
|
||||||
|
| Segmented subscriptions list: Channels | ✅ |
|
||||||
|
| Subscriptions list: update user status via subscription | ✅ |
|
||||||
|
| Numbers os messages unread in the Subscriptions list | ✅ |
|
||||||
|
| Status change | ✅ |
|
||||||
|
| Upload image | ✅ |
|
||||||
|
| Take picture & upload it | ✅ |
|
||||||
|
| 2FA | ✅ |
|
||||||
|
| Signup | ✅ |
|
||||||
|
| Autocomplete with usernames | ✅ |
|
||||||
|
| Autocomplete with @all & @here | ✅ |
|
||||||
|
| Autocomplete room/channel name | ✅ |
|
||||||
|
| Upload audio | ✅ |
|
||||||
|
| Forgot your password | ✅ |
|
||||||
|
| Login screen: terms of service | ✅ |
|
||||||
|
| Login screen: privacy policy | ✅ |
|
||||||
|
| Authentication via Google | ✅ |
|
||||||
|
| Authentication via Facebook | ✅ |
|
||||||
|
| Authentication via Twitter | ✅ |
|
||||||
|
| Authentication via GitHub | ✅ |
|
||||||
|
| Authentication via GitLab | ✅ |
|
||||||
|
| Authentication via LinkedIn | ✅ |
|
||||||
|
| Create channel | ✅ |
|
||||||
|
| Search Local | ✅ |
|
||||||
|
| Search in the API | ✅ |
|
||||||
|
| Settings -> License | ✅ |
|
||||||
|
| Settings -> App version | ✅ |
|
||||||
|
| Autocomplete emoji | ✅ |
|
||||||
|
| Upload file (documents, PDFs, spreadsheets, zip files, etc) | ✅ |
|
||||||
|
| Copy message | ✅ |
|
||||||
|
| Pin message | ✅ |
|
||||||
|
| Unpin message | ✅ |
|
||||||
|
| Channel Info screen -> Members | ✅ |
|
||||||
|
| Channel Info screen -> Pinned | ✅ |
|
||||||
|
| Channel Info screen -> Starred | ✅ |
|
||||||
|
| Channel Info screen -> Uploads | ✅ |
|
||||||
|
| Star message | ✅ |
|
||||||
|
| Unstar message | ✅ |
|
||||||
|
| Channel Info screen -> Topic | ✅ |
|
||||||
|
| Channel Info screen -> Description | ✅ |
|
||||||
|
| Star a channel | ✅ |
|
||||||
|
| Message format: videos | ✅ |
|
||||||
|
| Message format: audios | ✅ |
|
||||||
|
| Edit message | ✅ |
|
||||||
|
| Delete a message | ✅ |
|
||||||
|
| Reply message | ✅ |
|
||||||
|
| Quote message | ✅ |
|
||||||
|
| Muted state | ✅ |
|
||||||
|
| Offline reading | ✅ |
|
||||||
|
| Offline writing | ✅ |
|
||||||
|
| Edit profile | ✅ |
|
||||||
|
| Reactions | ✅ |
|
||||||
|
| Custom emojis | ✅ |
|
||||||
|
| Accessibility (Basic) | ✅ |
|
||||||
|
| Tap notification, go to the channel | ✅ |
|
||||||
|
| Deep links: Authentication | ✅ |
|
||||||
|
| Deep links: Rooms | ✅ |
|
||||||
|
| Full name setting | ✅ |
|
||||||
|
| Read only rooms | ✅ |
|
||||||
|
| Typing status | ✅ |
|
||||||
|
| Create channel/group | ✅ |
|
||||||
|
| Disable registration setting | ✅ |
|
||||||
|
| Unread red line indicator on message list | ✅ |
|
||||||
|
| Search Messages in Channel | ✅ |
|
||||||
|
| Mentions List | ✅ |
|
||||||
|
| Attachment List | ✅ |
|
||||||
|
| Join a Room | ✅ |
|
||||||
|
|
||||||
|
## Detox (end-to-end tests)
|
||||||
|
- Build your app
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ detox build --configuration ios.sim.release
|
||||||
|
```
|
||||||
|
|
||||||
|
- Run tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ detox test --configuration ios.sim.release
|
||||||
|
```
|
||||||
|
|
||||||
|
## Storybook
|
||||||
|
- Open index.js
|
||||||
|
|
||||||
|
- Uncomment following line
|
||||||
|
|
||||||
|
```bash
|
||||||
|
import './storybook';
|
||||||
|
```
|
||||||
|
|
||||||
|
- Comment out following lines
|
||||||
|
```bash
|
||||||
|
import './app/ReactotronConfig';
|
||||||
|
import { AppRegistry } from 'react-native';
|
||||||
|
import App from './app/index';
|
||||||
|
import { name as appName } from './app.json';
|
||||||
|
|
||||||
|
AppRegistry.registerComponent(appName, () => App);
|
||||||
|
```
|
||||||
|
|
||||||
|
- Start your application again
|
|
@ -1,5 +0,0 @@
|
||||||
export default {
|
|
||||||
start: () => '',
|
|
||||||
leaveBreadcrumb: () => '',
|
|
||||||
notify: () => ''
|
|
||||||
};
|
|
|
@ -1,3 +0,0 @@
|
||||||
export default {
|
|
||||||
crashlytics: null
|
|
||||||
};
|
|
|
@ -1,2 +0,0 @@
|
||||||
export class Rocketchat {}
|
|
||||||
export const settings = {};
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
export class Client { }
|
||||||
|
|
||||||
|
export default {
|
||||||
|
bugsnag: () => '',
|
||||||
|
leaveBreadcrumb: () => '',
|
||||||
|
notify: () => '',
|
||||||
|
loggerConfig: () => ''
|
||||||
|
};
|
|
@ -0,0 +1,3 @@
|
||||||
|
export default {
|
||||||
|
openBrowserAsync: () => ''
|
||||||
|
};
|
|
@ -1,3 +0,0 @@
|
||||||
export default {
|
|
||||||
BuildConfigs: null
|
|
||||||
};
|
|
|
@ -1,3 +1,6 @@
|
||||||
import mockDeviceInfo from 'react-native-device-info/jest/react-native-device-info-mock';
|
export default {
|
||||||
|
getModel: () => '',
|
||||||
export default mockDeviceInfo;
|
getReadableVersion: () => '',
|
||||||
|
getBundleId: () => '',
|
||||||
|
isTablet: () => false
|
||||||
|
};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
export const RectButton = ({ children }) => children;
|
export const RectButton = () => 'View';
|
||||||
export const State = () => 'View';
|
export const State = () => 'View';
|
||||||
export const LongPressGestureHandler = ({ children }) => children;
|
export const LongPressGestureHandler = () => 'View';
|
||||||
export const BorderlessButton = ({ children }) => children;
|
export const BorderlessButton = () => 'View';
|
||||||
export const PanGestureHandler = ({ children }) => children;
|
export const PanGestureHandler = () => 'View';
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
export class MMKVLoader {
|
|
||||||
constructor() {
|
|
||||||
console.log('MMKVLoader constructor mock');
|
|
||||||
}
|
|
||||||
|
|
||||||
setProcessingMode = jest.fn().mockImplementation(() => ({
|
|
||||||
withEncryption: jest.fn().mockImplementation(() => ({
|
|
||||||
initialize: jest.fn().mockImplementation(() => {})
|
|
||||||
}))
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
export const ProcessingModes = {
|
|
||||||
MULTI_PROCESS: ''
|
|
||||||
};
|
|
||||||
|
|
||||||
export const create = jest.fn();
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
export default {
|
||||||
|
set: () => '',
|
||||||
|
get: () => ''
|
||||||
|
};
|
|
@ -0,0 +1,3 @@
|
||||||
|
import initStoryshots from '@storybook/addon-storyshots';
|
||||||
|
|
||||||
|
initStoryshots();
|
|
@ -1,31 +0,0 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Avatar Path 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/diego.mello?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Avatar Room Id 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/room/devWBbYr7inwupPqK?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Avatar Text 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/Avatar?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Avatar Url 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://user-images.githubusercontent.com/29778115/89444446-14738480-d728-11ea-9412-75fd978d95fb.jpg\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Channel 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/@general?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Children 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/Avatar?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#f5455c\\"},[{\\"width\\":24,\\"height\\":24,\\"textAlignVertical\\":\\"center\\"},[{\\"position\\":\\"absolute\\",\\"bottom\\":-2,\\"right\\":-2,\\"borderRadius\\":10}]],{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Custom Border Radius 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":28},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":28}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/Avatar?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Custom Style 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},{\\"padding\\":16}],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/Avatar?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Direct 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/diego.mello?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Emoji 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},[{\\"width\\":30,\\"height\\":30},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/emoji-custom/troll.jpg\\",\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"contain\\"},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Static 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://user-images.githubusercontent.com/29778115/89444446-14738480-d728-11ea-9412-75fd978d95fb.jpg\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Touchable 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/Avatar?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar With E Tag 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/djorkaeff.alexandre?format=png&size=112&etag=5ag8KffJcZj9m5rCv\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Without E Tag 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/djorkaeff.alexandre?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Avatar Wrong Server 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4},null],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":56,\\"height\\":56,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://google.com/avatar/Avatar?format=png&size=112\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]}"`;
|
|
|
@ -1,17 +0,0 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`Storyshots BackgroundContainer Basic 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessibilityIgnoresInvertColors\\":true,\\"style\\":{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\",\\"position\\":\\"absolute\\"}},\\"children\\":[{\\"type\\":\\"Image\\",\\"props\\":{\\"source\\":{\\"uri\\":\\"message_empty_light\\"},\\"style\\":[{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\"},null]},\\"children\\":null}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots BackgroundContainer Black Theme Loading 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessibilityIgnoresInvertColors\\":true,\\"style\\":{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\",\\"position\\":\\"absolute\\"}},\\"children\\":[{\\"type\\":\\"Image\\",\\"props\\":{\\"source\\":{\\"uri\\":\\"message_empty_black\\"},\\"style\\":[{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\"},null]},\\"children\\":null}]},{\\"type\\":\\"ActivityIndicator\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"top\\":60,\\"left\\":0,\\"right\\":0,\\"fontSize\\":16,\\"paddingHorizontal\\":24,\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\"},\\"color\\":\\"#f9f9f9\\"},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots BackgroundContainer Black Theme Text 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessibilityIgnoresInvertColors\\":true,\\"style\\":{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\",\\"position\\":\\"absolute\\"}},\\"children\\":[{\\"type\\":\\"Image\\",\\"props\\":{\\"source\\":{\\"uri\\":\\"message_empty_black\\"},\\"style\\":[{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\"},null]},\\"children\\":null}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"position\\":\\"absolute\\",\\"top\\":60,\\"left\\":0,\\"right\\":0,\\"fontSize\\":16,\\"paddingHorizontal\\":24,\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\"},{\\"color\\":\\"#f9f9f9\\"}]},\\"children\\":[\\"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries\\"]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots BackgroundContainer Dark Theme Loading 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessibilityIgnoresInvertColors\\":true,\\"style\\":{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\",\\"position\\":\\"absolute\\"}},\\"children\\":[{\\"type\\":\\"Image\\",\\"props\\":{\\"source\\":{\\"uri\\":\\"message_empty_dark\\"},\\"style\\":[{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\"},null]},\\"children\\":null}]},{\\"type\\":\\"ActivityIndicator\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"top\\":60,\\"left\\":0,\\"right\\":0,\\"fontSize\\":16,\\"paddingHorizontal\\":24,\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\"},\\"color\\":\\"#f9f9f9\\"},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots BackgroundContainer Dark Theme Text 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessibilityIgnoresInvertColors\\":true,\\"style\\":{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\",\\"position\\":\\"absolute\\"}},\\"children\\":[{\\"type\\":\\"Image\\",\\"props\\":{\\"source\\":{\\"uri\\":\\"message_empty_dark\\"},\\"style\\":[{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\"},null]},\\"children\\":null}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"position\\":\\"absolute\\",\\"top\\":60,\\"left\\":0,\\"right\\":0,\\"fontSize\\":16,\\"paddingHorizontal\\":24,\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\"},{\\"color\\":\\"#f9f9f9\\"}]},\\"children\\":[\\"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries\\"]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots BackgroundContainer Loading 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessibilityIgnoresInvertColors\\":true,\\"style\\":{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\",\\"position\\":\\"absolute\\"}},\\"children\\":[{\\"type\\":\\"Image\\",\\"props\\":{\\"source\\":{\\"uri\\":\\"message_empty_light\\"},\\"style\\":[{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\"},null]},\\"children\\":null}]},{\\"type\\":\\"ActivityIndicator\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"top\\":60,\\"left\\":0,\\"right\\":0,\\"fontSize\\":16,\\"paddingHorizontal\\":24,\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\"},\\"color\\":\\"#6C727A\\"},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots BackgroundContainer Long Text 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessibilityIgnoresInvertColors\\":true,\\"style\\":{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\",\\"position\\":\\"absolute\\"}},\\"children\\":[{\\"type\\":\\"Image\\",\\"props\\":{\\"source\\":{\\"uri\\":\\"message_empty_light\\"},\\"style\\":[{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\"},null]},\\"children\\":null}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"position\\":\\"absolute\\",\\"top\\":60,\\"left\\":0,\\"right\\":0,\\"fontSize\\":16,\\"paddingHorizontal\\":24,\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\"},{\\"color\\":\\"#6C727A\\"}]},\\"children\\":[\\"Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industrys standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries\\"]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots BackgroundContainer Text 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessibilityIgnoresInvertColors\\":true,\\"style\\":{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\",\\"position\\":\\"absolute\\"}},\\"children\\":[{\\"type\\":\\"Image\\",\\"props\\":{\\"source\\":{\\"uri\\":\\"message_empty_light\\"},\\"style\\":[{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},{\\"width\\":\\"100%\\",\\"height\\":\\"100%\\"},null]},\\"children\\":null}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"position\\":\\"absolute\\",\\"top\\":60,\\"left\\":0,\\"right\\":0,\\"fontSize\\":16,\\"paddingHorizontal\\":24,\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\"},{\\"color\\":\\"#6C727A\\"}]},\\"children\\":[\\"Text here\\"]}]}"`;
|
|
|
@ -1,13 +0,0 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`Storyshots Button Custom Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":12,\\"backgroundColor\\":\\"purple\\",\\"padding\\":10,\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"yellow\\",\\"fontSize\\":18},[{\\"textAlign\\":\\"left\\"}]],\\"accessibilityLabel\\":\\"Press me!\\"},\\"children\\":[\\"Press me!\\"]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Button Disabled Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":true},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#1d74f5\\",\\"opacity\\":0.3}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#ffffff\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"Press me!\\"},\\"children\\":[\\"Press me!\\"]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Button Disabled Loading Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":true},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#1d74f5\\",\\"opacity\\":0.3}},\\"children\\":[{\\"type\\":\\"ActivityIndicator\\",\\"props\\":{\\"style\\":[{\\"padding\\":16,\\"flex\\":1},null],\\"color\\":\\"#ffffff\\"},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Button Loading Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":true},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#1d74f5\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"ActivityIndicator\\",\\"props\\":{\\"style\\":[{\\"padding\\":16,\\"flex\\":1},null],\\"color\\":\\"#ffffff\\"},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Button Primary Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#1d74f5\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#ffffff\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"Press me!\\"},\\"children\\":[\\"Press me!\\"]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Button Secondary Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#ffffff\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"Press me!\\"},\\"children\\":[\\"Press me!\\"]}]}"`;
|
|
|
@ -1,11 +0,0 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`Storyshots Chip Chip Text 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":4,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4},{\\"marginRight\\":8,\\"marginVertical\\":8}],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/rocket.cat?format=png&size=56\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Rocket.Cat\\"]}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":16,\\"color\\":\\"#6C727A\\"},null,{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Chip Chip With Short Text 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":4,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4},{\\"marginRight\\":8,\\"marginVertical\\":8}],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/rocket.cat?format=png&size=56\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Short\\"]}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":16,\\"color\\":\\"#6C727A\\"},null,{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Chip Chip Without Avatar 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":4,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Without Avatar\\"]}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":16,\\"color\\":\\"#6C727A\\"},null,{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Chip Chip Without Avatar And Icon 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":true},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":4,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Without Avatar and Icon\\"]}]}]}]}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Chip Chip Without Icon 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":true},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":4,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4},{\\"marginRight\\":8,\\"marginVertical\\":8}],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/rocket.cat?format=png&size=56\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Without Icon\\"]}]}]}]}]}"`;
|
|
|
@ -1,11 +0,0 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`Storyshots HeaderButtons Badge 1`] = `"{\\"type\\":\\"RNCSafeAreaProvider\\",\\"props\\":{\\"style\\":[{\\"flex\\":1},null]},\\"children\\":null}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots HeaderButtons Common 1`] = `"{\\"type\\":\\"RNCSafeAreaProvider\\",\\"props\\":{\\"style\\":[{\\"flex\\":1},null]},\\"children\\":null}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots HeaderButtons Icons 1`] = `"{\\"type\\":\\"RNCSafeAreaProvider\\",\\"props\\":{\\"style\\":[{\\"flex\\":1},null]},\\"children\\":null}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots HeaderButtons Themes 1`] = `"{\\"type\\":\\"RNCSafeAreaProvider\\",\\"props\\":{\\"style\\":[{\\"flex\\":1},null]},\\"children\\":null}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots HeaderButtons Title 1`] = `"{\\"type\\":\\"RNCSafeAreaProvider\\",\\"props\\":{\\"style\\":[{\\"flex\\":1},null]},\\"children\\":null}"`;
|
|
|
@ -1,5 +0,0 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`Storyshots Login Services Separators 1`] = `"[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"More options\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":0,\\"backgroundColor\\":\\"#ffffff\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#1d74f5\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"More options\\"},\\"children\\":[\\"More options\\"]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"marginVertical\\":24}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"height\\":1,\\"flex\\":1},{\\"backgroundColor\\":\\"#e1e5e8\\"}]},\\"children\\":null},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":14,\\"marginLeft\\":14,\\"marginRight\\":14,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#9ca2a8\\"}]},\\"children\\":[\\"OR\\"]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"height\\":1,\\"flex\\":1},{\\"backgroundColor\\":\\"#e1e5e8\\"}]},\\"children\\":null}]},{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Less options\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":0,\\"backgroundColor\\":\\"#ffffff\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#1d74f5\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"Less options\\"},\\"children\\":[\\"Less options\\"]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"marginVertical\\":24}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"height\\":1,\\"flex\\":1},{\\"backgroundColor\\":\\"#e1e5e8\\"}]},\\"children\\":null},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":14,\\"marginLeft\\":14,\\"marginRight\\":14,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#9ca2a8\\"}]},\\"children\\":[\\"OR\\"]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"height\\":1,\\"flex\\":1},{\\"backgroundColor\\":\\"#e1e5e8\\"}]},\\"children\\":null}]}]"`;
|
|
||||||
|
|
||||||
exports[`Storyshots Login Services Service List 1`] = `"[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"borderRadius\\":4,\\"width\\":\\"100%\\",\\"height\\":48,\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"center\\",\\"paddingHorizontal\\":15}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#0d0e12\\"},{\\"position\\":\\"absolute\\",\\"left\\":15,\\"top\\":12,\\"width\\":24,\\"height\\":24},{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"fontSize\\":16},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Continue with\\",\\" \\",{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"600\\"}},\\"children\\":[\\"github\\"]}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"borderRadius\\":4,\\"width\\":\\"100%\\",\\"height\\":48,\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"center\\",\\"paddingHorizontal\\":15}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#0d0e12\\"},{\\"position\\":\\"absolute\\",\\"left\\":15,\\"top\\":12,\\"width\\":24,\\"height\\":24},{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"fontSize\\":16},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Continue with\\",\\" \\",{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"600\\"}},\\"children\\":[\\"gitlab\\"]}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"borderRadius\\":4,\\"width\\":\\"100%\\",\\"height\\":48,\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"center\\",\\"paddingHorizontal\\":15}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#0d0e12\\"},{\\"position\\":\\"absolute\\",\\"left\\":15,\\"top\\":12,\\"width\\":24,\\"height\\":24},{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"fontSize\\":16},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Continue with\\",\\" \\",{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"600\\"}},\\"children\\":[\\"google\\"]}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"borderRadius\\":4,\\"width\\":\\"100%\\",\\"height\\":48,\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"center\\",\\"paddingHorizontal\\":15}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#0d0e12\\"},{\\"position\\":\\"absolute\\",\\"left\\":15,\\"top\\":12,\\"width\\":24,\\"height\\":24},{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"fontSize\\":16},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Continue with\\",\\" \\",{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"600\\"}},\\"children\\":[\\"apple\\"]}]}]}]"`;
|
|
|
@ -1,3 +0,0 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`Storyshots SearchBox Basic 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"testID\\":\\"searchbox\\",\\"style\\":{\\"backgroundColor\\":\\"#ffffff\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"marginBottom\\":10},{\\"margin\\":16,\\"marginBottom\\":16}]},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"position\\":\\"relative\\",\\"justifyContent\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"TextInput\\",\\"props\\":{\\"style\\":[{\\"color\\":\\"#0d0e12\\"},[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"height\\":48,\\"fontSize\\":16,\\"paddingHorizontal\\":16,\\"paddingVertical\\":10,\\"borderWidth\\":1,\\"borderRadius\\":4},null,{\\"paddingRight\\":45},{\\"backgroundColor\\":\\"#ffffff\\",\\"borderColor\\":\\"#cbcbcc\\",\\"color\\":\\"#0d0e12\\"},null,null],{\\"textAlign\\":\\"auto\\"}],\\"placeholderTextColor\\":\\"#9ca2a8\\",\\"keyboardAppearance\\":\\"light\\",\\"autoCorrect\\":false,\\"autoCapitalize\\":\\"none\\",\\"underlineColorAndroid\\":\\"transparent\\",\\"accessibilityLabel\\":\\"Search\\",\\"placeholder\\":\\"Search\\",\\"value\\":\\"\\",\\"blurOnSubmit\\":true,\\"returnKeyType\\":\\"search\\"},\\"children\\":null},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":20,\\"color\\":\\"#2f343d\\"},[{\\"position\\":\\"absolute\\"},{\\"right\\":12}],{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}"`;
|
|
|
@ -1,27 +0,0 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Action - Buttons 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Action - Select 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Context 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Fields 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Image 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Section + DatePicker 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Section + Markdown List 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Section + Multi Select 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Section + Overflow 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Section + Select 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Section + button 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Section + image 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitMessage Section 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
|
@ -1,21 +0,0 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitModal Modal - Actions 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitModal Modal - Contexts and Dividers 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitModal Modal - DatePicker with error 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitModal Modal - Form Input 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitModal Modal - Form TextArea 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitModal Modal - Images 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitModal Modal - Input with error 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitModal Modal - Multilne with error 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitModal Modal - Section and Accessories 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
||||||
|
|
||||||
exports[`Storyshots UIKit/UiKitModal Modal - Section and Selects 1`] = `"{\\"type\\":\\"RCTScrollView\\",\\"props\\":{\\"style\\":[{\\"flex\\":1,\\"backgroundColor\\":\\"#fff\\"},{\\"paddingHorizontal\\":16}],\\"keyboardShouldPersistTaps\\":\\"always\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{},\\"children\\":null}]}"`;
|
|
|
@ -1,3 +0,0 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`Storyshots CollapsibleQuote Item 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"padding\\":10}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"testID\\":\\"collapsibleQuoteTouchable-Engineering (9 today)\\",\\"hitSlop\\":{\\"top\\":4,\\"right\\":4,\\"bottom\\":4,\\"left\\":4},\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"marginTop\\":6,\\"borderWidth\\":1,\\"borderRadius\\":4,\\"minHeight\\":40,\\"backgroundColor\\":\\"#f3f4f5\\",\\"borderLeftColor\\":\\"#CBCED1\\",\\"borderTopColor\\":\\"#e1e5e8\\",\\"borderRightColor\\":\\"#e1e5e8\\",\\"borderBottomColor\\":\\"#e1e5e8\\",\\"borderLeftWidth\\":2,\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"borderRadius\\":4,\\"padding\\":8}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\"}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#6C727A\\"}]},\\"children\\":[\\"Engineering (9 today)\\"]}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"width\\":20,\\"height\\":20,\\"right\\":8,\\"top\\":8,\\"justifyContent\\":\\"center\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":22,\\"color\\":\\"#6C727A\\"},null,{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}]}"`;
|
|
|
@ -1,17 +0,0 @@
|
||||||
import initStoryshots, { Stories2SnapsConverter } from '@storybook/addon-storyshots';
|
|
||||||
import { render } from '@testing-library/react-native';
|
|
||||||
|
|
||||||
global.Date.now = jest.fn(() => new Date('2019-10-10').getTime());
|
|
||||||
|
|
||||||
const converter = new Stories2SnapsConverter();
|
|
||||||
|
|
||||||
initStoryshots({
|
|
||||||
test: ({ story, context }) => {
|
|
||||||
const snapshotFilename = converter.getSnapshotFileName(context);
|
|
||||||
const storyElement = story.render();
|
|
||||||
const { update, toJSON } = render(storyElement);
|
|
||||||
update(storyElement);
|
|
||||||
const json = toJSON();
|
|
||||||
expect(JSON.stringify(json)).toMatchSpecificSnapshot(snapshotFilename);
|
|
||||||
}
|
|
||||||
});
|
|
|
@ -1,3 +0,0 @@
|
||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
||||||
|
|
||||||
exports[`Storyshots SwitchItem Switch 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"minHeight\\":54,\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"space-between\\",\\"flexDirection\\":\\"row\\",\\"maxHeight\\":80,\\"marginBottom\\":12},{\\"backgroundColor\\":\\"#ffffff\\"}]},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"marginRight\\":8}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":14,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Welcome to Rocket.Chat\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"testID\\":\\"create-channel-switch-id-hint\\",\\"style\\":[{\\"fontSize\\":14,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\"},{\\"color\\":\\"#9ca2a8\\"}]},\\"children\\":[\\"Only authorized users can write new messages\\"]}]},{\\"type\\":\\"RCTSwitch\\",\\"props\\":{\\"testID\\":\\"create-channel-switch-id\\",\\"disabled\\":false,\\"onTintColor\\":\\"#2de0a5\\",\\"style\\":{\\"height\\":31,\\"width\\":51},\\"tintColor\\":\\"#f5455c\\",\\"value\\":false,\\"accessibilityRole\\":\\"switch\\"},\\"children\\":null}]}]}"`;
|
|
|
@ -1,6 +0,0 @@
|
||||||
source "https://rubygems.org"
|
|
||||||
|
|
||||||
gem "fastlane"
|
|
||||||
|
|
||||||
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
|
|
||||||
eval_gemfile(plugins_path) if File.exist?(plugins_path)
|
|
|
@ -1,219 +0,0 @@
|
||||||
GEM
|
|
||||||
remote: https://rubygems.org/
|
|
||||||
specs:
|
|
||||||
CFPropertyList (3.0.5)
|
|
||||||
rexml
|
|
||||||
addressable (2.8.0)
|
|
||||||
public_suffix (>= 2.0.2, < 5.0)
|
|
||||||
artifactory (3.0.15)
|
|
||||||
atomos (0.1.3)
|
|
||||||
aws-eventstream (1.2.0)
|
|
||||||
aws-partitions (1.600.0)
|
|
||||||
aws-sdk-core (3.131.2)
|
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
|
||||||
aws-partitions (~> 1, >= 1.525.0)
|
|
||||||
aws-sigv4 (~> 1.1)
|
|
||||||
jmespath (~> 1, >= 1.6.1)
|
|
||||||
aws-sdk-kms (1.57.0)
|
|
||||||
aws-sdk-core (~> 3, >= 3.127.0)
|
|
||||||
aws-sigv4 (~> 1.1)
|
|
||||||
aws-sdk-s3 (1.114.0)
|
|
||||||
aws-sdk-core (~> 3, >= 3.127.0)
|
|
||||||
aws-sdk-kms (~> 1)
|
|
||||||
aws-sigv4 (~> 1.4)
|
|
||||||
aws-sigv4 (1.5.0)
|
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
|
||||||
babosa (1.0.4)
|
|
||||||
claide (1.1.0)
|
|
||||||
colored (1.2)
|
|
||||||
colored2 (3.1.2)
|
|
||||||
commander (4.6.0)
|
|
||||||
highline (~> 2.0.0)
|
|
||||||
declarative (0.0.20)
|
|
||||||
digest-crc (0.6.4)
|
|
||||||
rake (>= 12.0.0, < 14.0.0)
|
|
||||||
domain_name (0.5.20190701)
|
|
||||||
unf (>= 0.0.5, < 1.0.0)
|
|
||||||
dotenv (2.7.6)
|
|
||||||
emoji_regex (3.2.3)
|
|
||||||
excon (0.92.3)
|
|
||||||
faraday (1.10.0)
|
|
||||||
faraday-em_http (~> 1.0)
|
|
||||||
faraday-em_synchrony (~> 1.0)
|
|
||||||
faraday-excon (~> 1.1)
|
|
||||||
faraday-httpclient (~> 1.0)
|
|
||||||
faraday-multipart (~> 1.0)
|
|
||||||
faraday-net_http (~> 1.0)
|
|
||||||
faraday-net_http_persistent (~> 1.0)
|
|
||||||
faraday-patron (~> 1.0)
|
|
||||||
faraday-rack (~> 1.0)
|
|
||||||
faraday-retry (~> 1.0)
|
|
||||||
ruby2_keywords (>= 0.0.4)
|
|
||||||
faraday-cookie_jar (0.0.7)
|
|
||||||
faraday (>= 0.8.0)
|
|
||||||
http-cookie (~> 1.0.0)
|
|
||||||
faraday-em_http (1.0.0)
|
|
||||||
faraday-em_synchrony (1.0.0)
|
|
||||||
faraday-excon (1.1.0)
|
|
||||||
faraday-httpclient (1.0.1)
|
|
||||||
faraday-multipart (1.0.4)
|
|
||||||
multipart-post (~> 2)
|
|
||||||
faraday-net_http (1.0.1)
|
|
||||||
faraday-net_http_persistent (1.2.0)
|
|
||||||
faraday-patron (1.0.0)
|
|
||||||
faraday-rack (1.0.0)
|
|
||||||
faraday-retry (1.0.3)
|
|
||||||
faraday_middleware (1.2.0)
|
|
||||||
faraday (~> 1.0)
|
|
||||||
fastimage (2.2.6)
|
|
||||||
fastlane (2.206.2)
|
|
||||||
CFPropertyList (>= 2.3, < 4.0.0)
|
|
||||||
addressable (>= 2.8, < 3.0.0)
|
|
||||||
artifactory (~> 3.0)
|
|
||||||
aws-sdk-s3 (~> 1.0)
|
|
||||||
babosa (>= 1.0.3, < 2.0.0)
|
|
||||||
bundler (>= 1.12.0, < 3.0.0)
|
|
||||||
colored
|
|
||||||
commander (~> 4.6)
|
|
||||||
dotenv (>= 2.1.1, < 3.0.0)
|
|
||||||
emoji_regex (>= 0.1, < 4.0)
|
|
||||||
excon (>= 0.71.0, < 1.0.0)
|
|
||||||
faraday (~> 1.0)
|
|
||||||
faraday-cookie_jar (~> 0.0.6)
|
|
||||||
faraday_middleware (~> 1.0)
|
|
||||||
fastimage (>= 2.1.0, < 3.0.0)
|
|
||||||
gh_inspector (>= 1.1.2, < 2.0.0)
|
|
||||||
google-apis-androidpublisher_v3 (~> 0.3)
|
|
||||||
google-apis-playcustomapp_v1 (~> 0.1)
|
|
||||||
google-cloud-storage (~> 1.31)
|
|
||||||
highline (~> 2.0)
|
|
||||||
json (< 3.0.0)
|
|
||||||
jwt (>= 2.1.0, < 3)
|
|
||||||
mini_magick (>= 4.9.4, < 5.0.0)
|
|
||||||
multipart-post (~> 2.0.0)
|
|
||||||
naturally (~> 2.2)
|
|
||||||
optparse (~> 0.1.1)
|
|
||||||
plist (>= 3.1.0, < 4.0.0)
|
|
||||||
rubyzip (>= 2.0.0, < 3.0.0)
|
|
||||||
security (= 0.1.3)
|
|
||||||
simctl (~> 1.6.3)
|
|
||||||
terminal-notifier (>= 2.0.0, < 3.0.0)
|
|
||||||
terminal-table (>= 1.4.5, < 2.0.0)
|
|
||||||
tty-screen (>= 0.6.3, < 1.0.0)
|
|
||||||
tty-spinner (>= 0.8.0, < 1.0.0)
|
|
||||||
word_wrap (~> 1.0.0)
|
|
||||||
xcodeproj (>= 1.13.0, < 2.0.0)
|
|
||||||
xcpretty (~> 0.3.0)
|
|
||||||
xcpretty-travis-formatter (>= 0.0.3)
|
|
||||||
gh_inspector (1.1.3)
|
|
||||||
google-apis-androidpublisher_v3 (0.22.0)
|
|
||||||
google-apis-core (>= 0.5, < 2.a)
|
|
||||||
google-apis-core (0.6.0)
|
|
||||||
addressable (~> 2.5, >= 2.5.1)
|
|
||||||
googleauth (>= 0.16.2, < 2.a)
|
|
||||||
httpclient (>= 2.8.1, < 3.a)
|
|
||||||
mini_mime (~> 1.0)
|
|
||||||
representable (~> 3.0)
|
|
||||||
retriable (>= 2.0, < 4.a)
|
|
||||||
rexml
|
|
||||||
webrick
|
|
||||||
google-apis-iamcredentials_v1 (0.12.0)
|
|
||||||
google-apis-core (>= 0.6, < 2.a)
|
|
||||||
google-apis-playcustomapp_v1 (0.9.0)
|
|
||||||
google-apis-core (>= 0.6, < 2.a)
|
|
||||||
google-apis-storage_v1 (0.15.0)
|
|
||||||
google-apis-core (>= 0.5, < 2.a)
|
|
||||||
google-cloud-core (1.6.0)
|
|
||||||
google-cloud-env (~> 1.0)
|
|
||||||
google-cloud-errors (~> 1.0)
|
|
||||||
google-cloud-env (1.6.0)
|
|
||||||
faraday (>= 0.17.3, < 3.0)
|
|
||||||
google-cloud-errors (1.2.0)
|
|
||||||
google-cloud-storage (1.36.2)
|
|
||||||
addressable (~> 2.8)
|
|
||||||
digest-crc (~> 0.4)
|
|
||||||
google-apis-iamcredentials_v1 (~> 0.1)
|
|
||||||
google-apis-storage_v1 (~> 0.1)
|
|
||||||
google-cloud-core (~> 1.6)
|
|
||||||
googleauth (>= 0.16.2, < 2.a)
|
|
||||||
mini_mime (~> 1.0)
|
|
||||||
googleauth (1.2.0)
|
|
||||||
faraday (>= 0.17.3, < 3.a)
|
|
||||||
jwt (>= 1.4, < 3.0)
|
|
||||||
memoist (~> 0.16)
|
|
||||||
multi_json (~> 1.11)
|
|
||||||
os (>= 0.9, < 2.0)
|
|
||||||
signet (>= 0.16, < 2.a)
|
|
||||||
highline (2.0.3)
|
|
||||||
http-cookie (1.0.5)
|
|
||||||
domain_name (~> 0.5)
|
|
||||||
httpclient (2.8.3)
|
|
||||||
jmespath (1.6.1)
|
|
||||||
json (2.6.2)
|
|
||||||
jwt (2.4.1)
|
|
||||||
memoist (0.16.2)
|
|
||||||
mini_magick (4.11.0)
|
|
||||||
mini_mime (1.1.2)
|
|
||||||
multi_json (1.15.0)
|
|
||||||
multipart-post (2.0.0)
|
|
||||||
nanaimo (0.3.0)
|
|
||||||
naturally (2.2.1)
|
|
||||||
optparse (0.1.1)
|
|
||||||
os (1.1.4)
|
|
||||||
plist (3.6.0)
|
|
||||||
public_suffix (4.0.7)
|
|
||||||
rake (13.0.6)
|
|
||||||
representable (3.2.0)
|
|
||||||
declarative (< 0.1.0)
|
|
||||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
|
||||||
uber (< 0.2.0)
|
|
||||||
retriable (3.1.2)
|
|
||||||
rexml (3.2.5)
|
|
||||||
rouge (2.0.7)
|
|
||||||
ruby2_keywords (0.0.5)
|
|
||||||
rubyzip (2.3.2)
|
|
||||||
security (0.1.3)
|
|
||||||
signet (0.17.0)
|
|
||||||
addressable (~> 2.8)
|
|
||||||
faraday (>= 0.17.5, < 3.a)
|
|
||||||
jwt (>= 1.5, < 3.0)
|
|
||||||
multi_json (~> 1.10)
|
|
||||||
simctl (1.6.8)
|
|
||||||
CFPropertyList
|
|
||||||
naturally
|
|
||||||
terminal-notifier (2.0.0)
|
|
||||||
terminal-table (1.8.0)
|
|
||||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
|
||||||
trailblazer-option (0.1.2)
|
|
||||||
tty-cursor (0.7.1)
|
|
||||||
tty-screen (0.8.1)
|
|
||||||
tty-spinner (0.9.3)
|
|
||||||
tty-cursor (~> 0.7)
|
|
||||||
uber (0.1.0)
|
|
||||||
unf (0.1.4)
|
|
||||||
unf_ext
|
|
||||||
unf_ext (0.0.8.2)
|
|
||||||
unicode-display_width (1.8.0)
|
|
||||||
webrick (1.7.0)
|
|
||||||
word_wrap (1.0.0)
|
|
||||||
xcodeproj (1.22.0)
|
|
||||||
CFPropertyList (>= 2.3.3, < 4.0)
|
|
||||||
atomos (~> 0.1.3)
|
|
||||||
claide (>= 1.0.2, < 2.0)
|
|
||||||
colored2 (~> 3.1)
|
|
||||||
nanaimo (~> 0.3.0)
|
|
||||||
rexml (~> 3.2.4)
|
|
||||||
xcpretty (0.3.0)
|
|
||||||
rouge (~> 2.0.7)
|
|
||||||
xcpretty-travis-formatter (1.0.1)
|
|
||||||
xcpretty (~> 0.2, >= 0.0.7)
|
|
||||||
|
|
||||||
PLATFORMS
|
|
||||||
ruby
|
|
||||||
x64-mingw32
|
|
||||||
|
|
||||||
DEPENDENCIES
|
|
||||||
fastlane
|
|
||||||
|
|
||||||
BUNDLED WITH
|
|
||||||
2.3.11
|
|
|
@ -1,13 +1,8 @@
|
||||||
def taskRequests = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
|
|
||||||
def isFoss = taskRequests.contains("foss")
|
|
||||||
|
|
||||||
apply plugin: "com.android.application"
|
apply plugin: "com.android.application"
|
||||||
apply plugin: 'kotlin-android'
|
apply plugin: 'kotlin-android'
|
||||||
|
apply plugin: "io.fabric"
|
||||||
if (!isFoss) {
|
apply plugin: "com.google.firebase.firebase-perf"
|
||||||
apply plugin: 'com.google.firebase.crashlytics'
|
apply plugin: 'com.bugsnag.android.gradle'
|
||||||
apply plugin: 'com.bugsnag.android.gradle'
|
|
||||||
}
|
|
||||||
|
|
||||||
import com.android.build.OutputFile
|
import com.android.build.OutputFile
|
||||||
|
|
||||||
|
@ -24,9 +19,7 @@ import com.android.build.OutputFile
|
||||||
* // the name of the generated asset file containing your JS bundle
|
* // the name of the generated asset file containing your JS bundle
|
||||||
* bundleAssetName: "index.android.bundle",
|
* bundleAssetName: "index.android.bundle",
|
||||||
*
|
*
|
||||||
* // the entry file for bundle generation. If none specified and
|
* // the entry file for bundle generation
|
||||||
* // "index.android.js" exists, it will be used. Otherwise "index.tsx" is
|
|
||||||
* // default. Can be overridden with ENTRY_FILE environment variable.
|
|
||||||
* entryFile: "index.android.js",
|
* entryFile: "index.android.js",
|
||||||
*
|
*
|
||||||
* // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
|
* // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
|
||||||
|
@ -87,12 +80,14 @@ import com.android.build.OutputFile
|
||||||
*/
|
*/
|
||||||
|
|
||||||
project.ext.react = [
|
project.ext.react = [
|
||||||
|
entryFile: "index.js",
|
||||||
bundleAssetName: "app.bundle",
|
bundleAssetName: "app.bundle",
|
||||||
iconFontNames: [ 'custom.ttf' ],
|
iconFontNames: [ 'custom.ttf' ],
|
||||||
enableHermes: true, // clean and rebuild if changing
|
enableHermes: true, // clean and rebuild if changing
|
||||||
]
|
]
|
||||||
|
|
||||||
apply from: "../../node_modules/react-native/react.gradle"
|
apply from: "../../node_modules/react-native/react.gradle"
|
||||||
|
apply from: '../../node_modules/react-native-unimodules/gradle.groovy'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set this to true to create two separate APKs instead of one:
|
* Set this to true to create two separate APKs instead of one:
|
||||||
|
@ -130,102 +125,22 @@ def jscFlavor = 'org.webkit:android-jsc:+'
|
||||||
*/
|
*/
|
||||||
def enableHermes = project.ext.react.get("enableHermes", false);
|
def enableHermes = project.ext.react.get("enableHermes", false);
|
||||||
|
|
||||||
/**
|
|
||||||
* Architectures to build native code for.
|
|
||||||
*/
|
|
||||||
def reactNativeArchitectures() {
|
|
||||||
def value = project.getProperties().get("reactNativeArchitectures")
|
|
||||||
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
|
|
||||||
}
|
|
||||||
|
|
||||||
android {
|
android {
|
||||||
ndkVersion rootProject.ext.ndkVersion
|
|
||||||
compileSdkVersion rootProject.ext.compileSdkVersion
|
compileSdkVersion rootProject.ext.compileSdkVersion
|
||||||
|
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId APPLICATION_ID
|
applicationId APPLICATIONID as String
|
||||||
minSdkVersion rootProject.ext.minSdkVersion
|
minSdkVersion rootProject.ext.minSdkVersion
|
||||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||||
versionCode VERSIONCODE as Integer
|
versionCode VERSIONCODE as Integer
|
||||||
versionName "4.37.0"
|
versionName VERSIONNAME as String
|
||||||
vectorDrawables.useSupportLibrary = true
|
vectorDrawables.useSupportLibrary = true
|
||||||
if (!isFoss) {
|
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
|
||||||
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
|
|
||||||
missingDimensionStrategy "RNNotifications.reactNativeVersion", "reactNative60" // See note below!
|
|
||||||
}
|
|
||||||
resValue "string", "rn_config_reader_custom_package", "chat.rocket.reactnative"
|
|
||||||
testBuildType System.getProperty('testBuildType', 'debug')
|
|
||||||
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
|
||||||
|
|
||||||
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
|
||||||
if (isNewArchitectureEnabled()) {
|
|
||||||
// We configure the NDK build only if you decide to opt-in for the New Architecture.
|
|
||||||
externalNativeBuild {
|
|
||||||
ndkBuild {
|
|
||||||
arguments "APP_PLATFORM=android-21",
|
|
||||||
"APP_STL=c++_shared",
|
|
||||||
"NDK_TOOLCHAIN_VERSION=clang",
|
|
||||||
"GENERATED_SRC_DIR=$buildDir/generated/source",
|
|
||||||
"PROJECT_BUILD_DIR=$buildDir",
|
|
||||||
"REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
|
|
||||||
"REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build"
|
|
||||||
cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1"
|
|
||||||
cppFlags "-std=c++17"
|
|
||||||
// Make sure this target name is the same you specify inside the
|
|
||||||
// src/main/jni/Android.mk file for the `LOCAL_MODULE` variable.
|
|
||||||
targets "rndiffapp_appmodules"
|
|
||||||
// Fix for windows limit on number of character in file paths and in command lines
|
|
||||||
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
|
||||||
arguments "NDK_APP_SHORT_COMMANDS=true"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!enableSeparateBuildPerCPUArchitecture) {
|
|
||||||
ndk {
|
|
||||||
abiFilters (*reactNativeArchitectures())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isNewArchitectureEnabled()) {
|
|
||||||
// We configure the NDK build only if you decide to opt-in for the New Architecture.
|
|
||||||
externalNativeBuild {
|
|
||||||
ndkBuild {
|
|
||||||
path "$projectDir/src/main/jni/Android.mk"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
def reactAndroidProjectDir = project(':ReactAndroid').projectDir
|
|
||||||
def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) {
|
|
||||||
dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck")
|
|
||||||
from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
|
|
||||||
into("$buildDir/react-ndk/exported")
|
|
||||||
}
|
|
||||||
def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) {
|
|
||||||
dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck")
|
|
||||||
from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
|
|
||||||
into("$buildDir/react-ndk/exported")
|
|
||||||
}
|
|
||||||
afterEvaluate {
|
|
||||||
// If you wish to add a custom TurboModule or component locally,
|
|
||||||
// you should uncomment this line.
|
|
||||||
// preBuild.dependsOn("generateCodegenArtifactsFromSchema")
|
|
||||||
preDebugBuild.dependsOn(packageReactNdkDebugLibs)
|
|
||||||
preReleaseBuild.dependsOn(packageReactNdkReleaseLibs)
|
|
||||||
// Due to a bug inside AGP, we have to explicitly set a dependency
|
|
||||||
// between configureNdkBuild* tasks and the preBuild tasks.
|
|
||||||
// This can be removed once this is solved: https://issuetracker.google.com/issues/207403732
|
|
||||||
configureNdkBuildRelease.dependsOn(preReleaseBuild)
|
|
||||||
configureNdkBuildDebug.dependsOn(preDebugBuild)
|
|
||||||
reactNativeArchitectures().each { architecture ->
|
|
||||||
tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure {
|
|
||||||
dependsOn("preDebugBuild")
|
|
||||||
}
|
|
||||||
tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure {
|
|
||||||
dependsOn("preReleaseBuild")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
|
@ -243,78 +158,17 @@ android {
|
||||||
reset()
|
reset()
|
||||||
enable enableSeparateBuildPerCPUArchitecture
|
enable enableSeparateBuildPerCPUArchitecture
|
||||||
universalApk false // If true, also generate a universal APK
|
universalApk false // If true, also generate a universal APK
|
||||||
include (*reactNativeArchitectures())
|
include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
minifyEnabled enableProguardInReleaseBuilds
|
minifyEnabled enableProguardInReleaseBuilds
|
||||||
setProguardFiles([getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'])
|
setProguardFiles([getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'])
|
||||||
proguardFile "${rootProject.projectDir}/../node_modules/detox/android/detox/proguard-rules-app.pro"
|
|
||||||
signingConfig signingConfigs.release
|
signingConfig signingConfigs.release
|
||||||
if (!isFoss) {
|
|
||||||
firebaseCrashlytics {
|
|
||||||
nativeSymbolUploadEnabled true
|
|
||||||
strippedNativeLibsDir 'build/intermediates/stripped_native_libs/release/out/lib'
|
|
||||||
unstrippedNativeLibsDir 'build/intermediates/merged_native_libs/release/out/lib'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// packagingOptions {
|
|
||||||
// pickFirst '**/armeabi-v7a/libc++_shared.so'
|
|
||||||
// pickFirst '**/x86/libc++_shared.so'
|
|
||||||
// pickFirst '**/arm64-v8a/libc++_shared.so'
|
|
||||||
// pickFirst '**/x86_64/libc++_shared.so'
|
|
||||||
// }
|
|
||||||
|
|
||||||
// FIXME: Remove when we update RN
|
|
||||||
packagingOptions {
|
|
||||||
pickFirst '**/*.so'
|
|
||||||
}
|
|
||||||
|
|
||||||
// applicationVariants are e.g. debug, release
|
// applicationVariants are e.g. debug, release
|
||||||
|
|
||||||
flavorDimensions "app", "type"
|
|
||||||
productFlavors {
|
|
||||||
official {
|
|
||||||
dimension = "app"
|
|
||||||
buildConfigField "boolean", "IS_OFFICIAL", "true"
|
|
||||||
}
|
|
||||||
experimental {
|
|
||||||
dimension = "app"
|
|
||||||
buildConfigField "boolean", "IS_OFFICIAL", "false"
|
|
||||||
}
|
|
||||||
foss {
|
|
||||||
dimension = "type"
|
|
||||||
buildConfigField "boolean", "FDROID_BUILD", "true"
|
|
||||||
}
|
|
||||||
play {
|
|
||||||
dimension = "type"
|
|
||||||
buildConfigField "boolean", "FDROID_BUILD", "false"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sourceSets {
|
|
||||||
// TODO: refactor making sure notifications are working properly both on debug and release
|
|
||||||
experimentalPlayDebug {
|
|
||||||
java.srcDirs = ['src/main/java', 'src/play/java']
|
|
||||||
manifest.srcFile 'src/play/AndroidManifest.xml'
|
|
||||||
}
|
|
||||||
experimentalPlayRelease {
|
|
||||||
java.srcDirs = ['src/main/java', 'src/play/java']
|
|
||||||
manifest.srcFile 'src/play/AndroidManifest.xml'
|
|
||||||
}
|
|
||||||
officialPlayDebug {
|
|
||||||
java.srcDirs = ['src/main/java', 'src/play/java']
|
|
||||||
manifest.srcFile 'src/play/AndroidManifest.xml'
|
|
||||||
}
|
|
||||||
officialPlayRelease {
|
|
||||||
java.srcDirs = ['src/main/java', 'src/play/java']
|
|
||||||
manifest.srcFile 'src/play/AndroidManifest.xml'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
applicationVariants.all { variant ->
|
applicationVariants.all { variant ->
|
||||||
variant.outputs.each { output ->
|
variant.outputs.each { output ->
|
||||||
// For each separate APK per architecture, set a unique version code as described here:
|
// For each separate APK per architecture, set a unique version code as described here:
|
||||||
|
@ -342,27 +196,18 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
addUnimodulesDependencies()
|
||||||
|
implementation project(':watermelondb')
|
||||||
|
implementation project(':reactnativenotifications')
|
||||||
|
implementation project(":reactnativekeyboardinput")
|
||||||
implementation project(':@react-native-community_viewpager')
|
implementation project(':@react-native-community_viewpager')
|
||||||
implementation "androidx.core:core-splashscreen:1.0.0"
|
|
||||||
playImplementation project(':react-native-notifications')
|
|
||||||
playImplementation 'com.google.firebase:firebase-core:16.0.0'
|
|
||||||
playImplementation project(':@react-native-firebase_app')
|
|
||||||
playImplementation project(':@react-native-firebase_analytics')
|
|
||||||
playImplementation project(':@react-native-firebase_crashlytics')
|
|
||||||
implementation fileTree(dir: "libs", include: ["*.jar"])
|
implementation fileTree(dir: "libs", include: ["*.jar"])
|
||||||
|
|
||||||
//noinspection GradleDynamicVersion
|
|
||||||
implementation "com.facebook.react:react-native:+" // From node_modules
|
implementation "com.facebook.react:react-native:+" // From node_modules
|
||||||
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
|
implementation "com.google.firebase:firebase-messaging:18.0.0"
|
||||||
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
|
implementation "com.google.firebase:firebase-core:16.0.9"
|
||||||
exclude group:'com.facebook.fbjni'
|
implementation "com.google.firebase:firebase-perf:17.0.2"
|
||||||
}
|
implementation('com.crashlytics.sdk.android:crashlytics:2.9.9@aar') {
|
||||||
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
|
transitive = true
|
||||||
exclude group:'com.facebook.flipper'
|
|
||||||
exclude group:'com.squareup.okhttp3', module:'okhttp'
|
|
||||||
}
|
|
||||||
debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
|
|
||||||
exclude group:'com.facebook.flipper'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enableHermes) {
|
if (enableHermes) {
|
||||||
|
@ -373,43 +218,17 @@ dependencies {
|
||||||
implementation jscFlavor
|
implementation jscFlavor
|
||||||
}
|
}
|
||||||
|
|
||||||
implementation "com.google.code.gson:gson:2.8.9"
|
implementation "com.google.code.gson:gson:2.8.5"
|
||||||
implementation "com.github.bumptech.glide:glide:4.9.0"
|
implementation "com.github.bumptech.glide:glide:4.9.0"
|
||||||
annotationProcessor "com.github.bumptech.glide:compiler:4.9.0"
|
annotationProcessor "com.github.bumptech.glide:compiler:4.9.0"
|
||||||
implementation "com.tencent:mmkv-static:1.2.10"
|
|
||||||
androidTestImplementation('com.wix:detox:+')
|
|
||||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
|
||||||
implementation 'com.facebook.soloader:soloader:0.10.4'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isNewArchitectureEnabled()) {
|
|
||||||
// If new architecture is enabled, we let you build RN from source
|
|
||||||
// Otherwise we fallback to a prebuilt .aar bundled in the NPM package.
|
|
||||||
// This will be applied to all the imported transtitive dependency.
|
|
||||||
configurations.all {
|
|
||||||
resolutionStrategy.dependencySubstitution {
|
|
||||||
substitute(module("com.facebook.react:react-native"))
|
|
||||||
.using(project(":ReactAndroid")).because("On New Architecture we're building React Native from source")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Run this once to be able to run the application with BUCK
|
// Run this once to be able to run the application with BUCK
|
||||||
// puts all compile dependencies into folder libs for BUCK to use
|
// puts all compile dependencies into folder libs for BUCK to use
|
||||||
task copyDownloadableDepsToLibs(type: Copy) {
|
task copyDownloadableDepsToLibs(type: Copy) {
|
||||||
from configurations.implementation
|
from configurations.compile
|
||||||
into 'libs'
|
into 'libs'
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
|
apply plugin: 'com.google.gms.google-services'
|
||||||
if (!isFoss) {
|
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
|
||||||
apply plugin: 'com.google.gms.google-services'
|
|
||||||
}
|
|
||||||
|
|
||||||
def isNewArchitectureEnabled() {
|
|
||||||
// To opt-in for the New Architecture, you can either:
|
|
||||||
// - Set `newArchEnabled` to true inside the `gradle.properties` file
|
|
||||||
// - Invoke gradle with `-newArchEnabled=true`
|
|
||||||
// - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true`
|
|
||||||
return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
|
|
||||||
}
|
|
|
@ -1,77 +1,41 @@
|
||||||
{
|
{
|
||||||
"project_info": {
|
"project_info": {
|
||||||
"project_number": "115198584049",
|
"project_number": "801394514609",
|
||||||
"firebase_url": "https://rocketchat-reactnative-test.firebaseio.com",
|
"firebase_url": "https://chat-rocket-whitelabel-test.firebaseio.com",
|
||||||
"project_id": "rocketchat-reactnative-test",
|
"project_id": "chat-rocket-whitelabel-test",
|
||||||
"storage_bucket": "rocketchat-reactnative-test.appspot.com"
|
"storage_bucket": "chat-rocket-whitelabel-test.appspot.com"
|
||||||
},
|
},
|
||||||
"client": [
|
"client": [
|
||||||
{
|
{
|
||||||
"client_info": {
|
"client_info": {
|
||||||
"mobilesdk_app_id": "1:115198584049:android:a79216ae48935d2c9ab550",
|
"mobilesdk_app_id": "1:801394514609:android:bb5a71e917cc8a88f6e090",
|
||||||
"android_client_info": {
|
"android_client_info": {
|
||||||
"package_name": "chat.rocket.android"
|
"package_name": "chat.rocket.whitelabel"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"oauth_client": [
|
"oauth_client": [
|
||||||
{
|
{
|
||||||
"client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com",
|
"client_id": "801394514609-36rajcmuqk8njmcq79tcabach65ntgju.apps.googleusercontent.com",
|
||||||
"client_type": 3
|
"client_type": 3
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"api_key": [
|
"api_key": [
|
||||||
{
|
{
|
||||||
"current_key": "AIzaSyAWwowhAfACHBw3YxmDOXY3QyakgjhJLqc"
|
"current_key": "AIzaSyBNkXTGoTRv0zr1IjJfnWNXz0u3uuYyODQ"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"services": {
|
"services": {
|
||||||
"appinvite_service": {
|
"appinvite_service": {
|
||||||
"other_platform_oauth_client": [
|
"other_platform_oauth_client": [
|
||||||
{
|
{
|
||||||
"client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com",
|
"client_id": "801394514609-36rajcmuqk8njmcq79tcabach65ntgju.apps.googleusercontent.com",
|
||||||
"client_type": 3
|
"client_type": 3
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"client_id": "115198584049-0efgfvm0oh9ap55g7epmqnjm27mq3j4e.apps.googleusercontent.com",
|
"client_id": "801394514609-gt4hc9opbqk8uba8marfij0jjp8c4qb1.apps.googleusercontent.com",
|
||||||
"client_type": 2,
|
"client_type": 2,
|
||||||
"ios_info": {
|
"ios_info": {
|
||||||
"bundle_id": "chat.rocket.reactnative"
|
"bundle_id": "chat.rocket.whitelabel"
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"client_info": {
|
|
||||||
"mobilesdk_app_id": "1:115198584049:android:8be27b1f7c42a2ed",
|
|
||||||
"android_client_info": {
|
|
||||||
"package_name": "chat.rocket.reactnative"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"api_key": [
|
|
||||||
{
|
|
||||||
"current_key": "AIzaSyAWwowhAfACHBw3YxmDOXY3QyakgjhJLqc"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"services": {
|
|
||||||
"appinvite_service": {
|
|
||||||
"other_platform_oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "115198584049-ack609b1338b827fta26s9rd2ab1aad5.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"client_id": "115198584049-0efgfvm0oh9ap55g7epmqnjm27mq3j4e.apps.googleusercontent.com",
|
|
||||||
"client_type": 2,
|
|
||||||
"ios_info": {
|
|
||||||
"bundle_id": "chat.rocket.reactnative"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
// Replace "com.example" here and below with your app's package name from the top of MainActivity.java
|
|
||||||
package chat.rocket.reactnative;
|
|
||||||
|
|
||||||
import com.wix.detox.Detox;
|
|
||||||
import com.wix.detox.config.DetoxConfig;
|
|
||||||
|
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
|
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
||||||
import androidx.test.filters.LargeTest;
|
|
||||||
import androidx.test.rule.ActivityTestRule;
|
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4.class)
|
|
||||||
@LargeTest
|
|
||||||
public class DetoxTest {
|
|
||||||
@Rule
|
|
||||||
// Replace 'MainActivity' with the value of android:name entry in
|
|
||||||
// <activity> in AndroidManifest.xml
|
|
||||||
public ActivityTestRule<chat.rocket.reactnative.MainActivity> mActivityRule = new ActivityTestRule<>(chat.rocket.reactnative.MainActivity.class, false, false);
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void runDetoxTests() {
|
|
||||||
DetoxConfig detoxConfig = new DetoxConfig();
|
|
||||||
detoxConfig.idlePolicyConfig.masterTimeoutSec = 90;
|
|
||||||
detoxConfig.idlePolicyConfig.idleResourceTimeoutSec = 60;
|
|
||||||
detoxConfig.rnContextLoadTimeoutSec = (chat.rocket.reactnative.BuildConfig.DEBUG ? 180 : 60);
|
|
||||||
|
|
||||||
Detox.runTests(mActivityRule, detoxConfig);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools">
|
|
||||||
|
|
||||||
<application
|
|
||||||
android:name="chat.rocket.reactnative.MainDebugApplication"
|
|
||||||
tools:ignore="GoogleAppIndexingWarning"
|
|
||||||
tools:replace="android:name"
|
|
||||||
tools:targetApi="28"
|
|
||||||
android:networkSecurityConfig="@xml/network_security_config">
|
|
||||||
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="true" />
|
|
||||||
</application>
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
|
||||||
</manifest>
|
|
|
@ -1,69 +0,0 @@
|
||||||
/**
|
|
||||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
||||||
*
|
|
||||||
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
|
|
||||||
* directory of this source tree.
|
|
||||||
*/
|
|
||||||
package chat.rocket.reactnative;
|
|
||||||
import android.content.Context;
|
|
||||||
import com.facebook.flipper.android.AndroidFlipperClient;
|
|
||||||
import com.facebook.flipper.android.utils.FlipperUtils;
|
|
||||||
import com.facebook.flipper.core.FlipperClient;
|
|
||||||
import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
|
|
||||||
import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
|
|
||||||
import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
|
|
||||||
import com.facebook.flipper.plugins.inspector.DescriptorMapping;
|
|
||||||
import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
|
|
||||||
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
|
|
||||||
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
|
|
||||||
import com.facebook.flipper.plugins.react.ReactFlipperPlugin;
|
|
||||||
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
|
|
||||||
import com.facebook.react.ReactInstanceEventListener;
|
|
||||||
import com.facebook.react.ReactInstanceManager;
|
|
||||||
import com.facebook.react.bridge.ReactContext;
|
|
||||||
import com.facebook.react.modules.network.NetworkingModule;
|
|
||||||
import com.facebook.react.modules.network.CustomClientBuilder;
|
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
public class ReactNativeFlipper {
|
|
||||||
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
|
|
||||||
if (FlipperUtils.shouldEnableFlipper(context)) {
|
|
||||||
final FlipperClient client = AndroidFlipperClient.getInstance(context);
|
|
||||||
client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
|
|
||||||
client.addPlugin(new ReactFlipperPlugin());
|
|
||||||
client.addPlugin(new DatabasesFlipperPlugin(context));
|
|
||||||
client.addPlugin(new SharedPreferencesFlipperPlugin(context));
|
|
||||||
client.addPlugin(CrashReporterPlugin.getInstance());
|
|
||||||
NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
|
|
||||||
NetworkingModule.setCustomClientBuilder(
|
|
||||||
new CustomClientBuilder() {
|
|
||||||
@Override
|
|
||||||
public void apply(OkHttpClient.Builder builder) {
|
|
||||||
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
client.addPlugin(networkFlipperPlugin);
|
|
||||||
client.start();
|
|
||||||
// Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
|
|
||||||
// Hence we run if after all native modules have been initialized
|
|
||||||
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
|
|
||||||
if (reactContext == null) {
|
|
||||||
reactInstanceManager.addReactInstanceEventListener(
|
|
||||||
new ReactInstanceEventListener() {
|
|
||||||
@Override
|
|
||||||
public void onReactContextInitialized(ReactContext reactContext) {
|
|
||||||
reactInstanceManager.removeReactInstanceEventListener(this);
|
|
||||||
reactContext.runOnNativeModulesQueueThread(
|
|
||||||
new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
client.addPlugin(new FrescoFlipperPlugin());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
client.addPlugin(new FrescoFlipperPlugin());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
<resources>
|
|
||||||
<string name="app_name">[DEBUG] Rocket.Chat Experimental</string>
|
|
||||||
<string name="share_extension_name">[DEBUG] Rocket.Chat Experimental</string>
|
|
||||||
</resources>
|
|
|
@ -1,10 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<network-security-config xmlns:tools="http://schemas.android.com/tools">
|
|
||||||
<base-config cleartextTrafficPermitted="true">
|
|
||||||
<trust-anchors>
|
|
||||||
<certificates src="system" />
|
|
||||||
<certificates src="user"
|
|
||||||
tools:ignore="AcceptsUserCertificates" />
|
|
||||||
</trust-anchors>
|
|
||||||
</base-config>
|
|
||||||
</network-security-config>
|
|
Before Width: | Height: | Size: 40 KiB |
|
@ -1,24 +0,0 @@
|
||||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:aapt="http://schemas.android.com/aapt"
|
|
||||||
android:width="108dp"
|
|
||||||
android:height="108dp"
|
|
||||||
android:viewportWidth="512"
|
|
||||||
android:viewportHeight="512">
|
|
||||||
<group>
|
|
||||||
<clip-path android:pathData="M0,0h512v512h-512z M 0,0"/>
|
|
||||||
<path
|
|
||||||
android:pathData="M0,0h512v512h-512z">
|
|
||||||
<aapt:attr name="android:fillColor">
|
|
||||||
<gradient
|
|
||||||
android:startY="0"
|
|
||||||
android:startX="256"
|
|
||||||
android:endY="512"
|
|
||||||
android:endX="256"
|
|
||||||
android:type="linear">
|
|
||||||
<item android:offset="0" android:color="#FF1C82FF"/>
|
|
||||||
<item android:offset="1" android:color="#FF0066E3"/>
|
|
||||||
</gradient>
|
|
||||||
</aapt:attr>
|
|
||||||
</path>
|
|
||||||
</group>
|
|
||||||
</vector>
|
|
|
@ -1,5 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
|
||||||
</adaptive-icon>
|
|
|
@ -1,5 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
|
||||||
</adaptive-icon>
|
|
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 7.7 KiB |
Before Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 19 KiB |
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<color name="primary_dark">#660B0B0B</color>
|
|
||||||
<item name="splashBackground" type="color">#1D74F5</item>
|
|
||||||
<item name="notification_text" type="color">#1D74F5</item>
|
|
||||||
</resources>
|
|
|
@ -1,4 +0,0 @@
|
||||||
<resources>
|
|
||||||
<string name="app_name">Rocket.Chat Experimental</string>
|
|
||||||
<string name="share_extension_name">Rocket.Chat Experimental</string>
|
|
||||||
</resources>
|
|
|
@ -1,14 +0,0 @@
|
||||||
package chat.rocket.reactnative;
|
|
||||||
|
|
||||||
import android.app.Application;
|
|
||||||
|
|
||||||
import com.facebook.react.ReactPackage;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class AdditionalModules {
|
|
||||||
public List<ReactPackage> getAdditionalModules(Application application) {
|
|
||||||
return Arrays.<ReactPackage>asList();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,88 +1,77 @@
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
package="chat.rocket.reactnative">
|
package="chat.rocket.whitelabel">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
|
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||||
|
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||||
|
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
|
||||||
|
<uses-permission-sdk-23 android:name="android.permission.VIBRATE"/>
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.CAMERA" />
|
<application
|
||||||
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
android:name=".MainApplication"
|
||||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
android:allowBackup="true"
|
||||||
<uses-permission android:name="android.permission.VIDEO_CAPTURE" />
|
android:label="@string/app_name"
|
||||||
<uses-permission android:name="android.permission.AUDIO_CAPTURE" />
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:theme="@style/AppTheme"
|
||||||
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
|
>
|
||||||
|
<activity
|
||||||
|
android:name="com.zoontek.rnbootsplash.RNBootSplashActivity"
|
||||||
|
android:theme="@style/BootTheme">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name=".MainActivity"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
|
||||||
|
android:launchMode="singleTask"
|
||||||
|
android:windowSoftInputMode="adjustResize"
|
||||||
|
android:exported="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
|
||||||
|
</intent-filter>
|
||||||
|
<intent-filter android:label="@string/app_name">
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
|
<data android:scheme="https" android:host="go.rocket.chat" />
|
||||||
|
<data android:scheme="rocketchat" android:host="room" />
|
||||||
|
<data android:scheme="rocketchat" android:host="auth" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
|
||||||
|
<receiver
|
||||||
|
android:name=".ReplyBroadcast"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false" />
|
||||||
|
<receiver
|
||||||
|
android:name=".DismissNotification"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="false" >
|
||||||
|
</receiver>
|
||||||
|
<activity
|
||||||
|
android:noHistory="true"
|
||||||
|
android:name=".share.ShareActivity"
|
||||||
|
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
|
||||||
|
android:label="@string/share_extension_name"
|
||||||
|
android:screenOrientation="portrait"
|
||||||
|
android:theme="@style/AppTheme" >
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.SEND" />
|
||||||
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
<data android:mimeType="*/*" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
<meta-data
|
||||||
|
android:name="com.bugsnag.android.API_KEY"
|
||||||
|
android:value="${BugsnagAPIKey}" />
|
||||||
|
</application>
|
||||||
|
|
||||||
<!-- permissions related to jitsi call -->
|
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
|
||||||
|
|
||||||
<application
|
|
||||||
android:name="chat.rocket.reactnative.MainApplication"
|
|
||||||
android:allowBackup="false"
|
|
||||||
android:icon="@mipmap/ic_launcher"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:networkSecurityConfig="@xml/network_security_config"
|
|
||||||
android:requestLegacyExternalStorage="true"
|
|
||||||
android:supportsRtl="true"
|
|
||||||
android:theme="@style/BootTheme"
|
|
||||||
android:hardwareAccelerated="true"
|
|
||||||
tools:replace="android:allowBackup">
|
|
||||||
<activity
|
|
||||||
android:name="chat.rocket.reactnative.MainActivity"
|
|
||||||
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
|
|
||||||
android:exported="true"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:launchMode="singleTask"
|
|
||||||
android:windowSoftInputMode="adjustResize">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter android:label="@string/app_name">
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:host="go.rocket.chat"
|
|
||||||
android:scheme="https" />
|
|
||||||
<data
|
|
||||||
android:host="jitsi.rocket.chat"
|
|
||||||
android:scheme="https" />
|
|
||||||
<data
|
|
||||||
android:host="room"
|
|
||||||
android:scheme="rocketchat" />
|
|
||||||
<data
|
|
||||||
android:host="auth"
|
|
||||||
android:scheme="rocketchat" />
|
|
||||||
<data
|
|
||||||
android:host="jitsi.rocket.chat"
|
|
||||||
android:scheme="rocketchat" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:name="chat.rocket.reactnative.share.ShareActivity"
|
|
||||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
|
|
||||||
android:label="@string/share_extension_name"
|
|
||||||
android:noHistory="true"
|
|
||||||
android:screenOrientation="portrait"
|
|
||||||
android:theme="@style/ShareTheme"
|
|
||||||
android:exported="true">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.SEND" />
|
|
||||||
<action android:name="android.intent.action.SEND_MULTIPLE" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<data android:mimeType="*/*" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
</application>
|
|
||||||
<queries>
|
|
||||||
<package android:name="org.jitsi.meet" />
|
|
||||||
<intent>
|
|
||||||
<action android:name="android.intent.action.SEND" />
|
|
||||||
</intent>
|
|
||||||
</queries>
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
Before Width: | Height: | Size: 40 KiB |
|
@ -0,0 +1,296 @@
|
||||||
|
package chat.rocket.whitelabel;
|
||||||
|
|
||||||
|
import android.app.Notification;
|
||||||
|
import android.app.NotificationChannel;
|
||||||
|
import android.app.NotificationManager;
|
||||||
|
import android.app.PendingIntent;
|
||||||
|
import android.app.RemoteInput;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.graphics.drawable.Icon;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.app.Person;
|
||||||
|
|
||||||
|
import com.google.gson.*;
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
|
import com.bumptech.glide.request.RequestOptions;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.lang.InterruptedException;
|
||||||
|
|
||||||
|
import com.facebook.react.bridge.ReactApplicationContext;
|
||||||
|
import com.wix.reactnativenotifications.core.AppLaunchHelper;
|
||||||
|
import com.wix.reactnativenotifications.core.AppLifecycleFacade;
|
||||||
|
import com.wix.reactnativenotifications.core.JsIOHelper;
|
||||||
|
import com.wix.reactnativenotifications.core.notification.PushNotification;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import static com.wix.reactnativenotifications.Defs.NOTIFICATION_RECEIVED_EVENT_NAME;
|
||||||
|
|
||||||
|
public class CustomPushNotification extends PushNotification {
|
||||||
|
public static ReactApplicationContext reactApplicationContext;
|
||||||
|
|
||||||
|
public CustomPushNotification(Context context, Bundle bundle, AppLifecycleFacade appLifecycleFacade, AppLaunchHelper appLaunchHelper, JsIOHelper jsIoHelper) {
|
||||||
|
super(context, bundle, appLifecycleFacade, appLaunchHelper, jsIoHelper);
|
||||||
|
reactApplicationContext = new ReactApplicationContext(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Map<String, List<Bundle>> notificationMessages = new HashMap<String, List<Bundle>>();
|
||||||
|
public static String KEY_REPLY = "KEY_REPLY";
|
||||||
|
public static String NOTIFICATION_ID = "NOTIFICATION_ID";
|
||||||
|
|
||||||
|
public static void clearMessages(int notId) {
|
||||||
|
notificationMessages.remove(Integer.toString(notId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceived() throws InvalidNotificationException {
|
||||||
|
final Bundle bundle = mNotificationProps.asBundle();
|
||||||
|
|
||||||
|
String notId = bundle.getString("notId", "1");
|
||||||
|
String title = bundle.getString("title");
|
||||||
|
|
||||||
|
if (notificationMessages.get(notId) == null) {
|
||||||
|
notificationMessages.put(notId, new ArrayList<Bundle>());
|
||||||
|
}
|
||||||
|
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Ejson ejson = gson.fromJson(bundle.getString("ejson", "{}"), Ejson.class);
|
||||||
|
|
||||||
|
boolean hasSender = ejson.sender != null;
|
||||||
|
|
||||||
|
bundle.putLong("time", new Date().getTime());
|
||||||
|
bundle.putString("username", hasSender ? ejson.sender.username : title);
|
||||||
|
bundle.putString("senderId", hasSender ? ejson.sender._id : "1");
|
||||||
|
bundle.putString("avatarUri", ejson.getAvatarUri());
|
||||||
|
|
||||||
|
notificationMessages.get(notId).add(bundle);
|
||||||
|
|
||||||
|
super.postNotification(Integer.parseInt(notId));
|
||||||
|
|
||||||
|
notifyReceivedToJS();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onOpened() {
|
||||||
|
Bundle bundle = mNotificationProps.asBundle();
|
||||||
|
final String notId = bundle.getString("notId", "1");
|
||||||
|
notificationMessages.remove(notId);
|
||||||
|
digestNotification();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Notification.Builder getNotificationBuilder(PendingIntent intent) {
|
||||||
|
final Notification.Builder notification = new Notification.Builder(mContext);
|
||||||
|
|
||||||
|
Bundle bundle = mNotificationProps.asBundle();
|
||||||
|
String notId = bundle.getString("notId", "1");
|
||||||
|
String title = bundle.getString("title");
|
||||||
|
String message = bundle.getString("message");
|
||||||
|
|
||||||
|
notification
|
||||||
|
.setContentTitle(title)
|
||||||
|
.setContentText(message)
|
||||||
|
.setContentIntent(intent)
|
||||||
|
.setPriority(Notification.PRIORITY_HIGH)
|
||||||
|
.setDefaults(Notification.DEFAULT_ALL)
|
||||||
|
.setAutoCancel(true);
|
||||||
|
|
||||||
|
Integer notificationId = Integer.parseInt(notId);
|
||||||
|
notificationColor(notification);
|
||||||
|
notificationChannel(notification);
|
||||||
|
notificationIcons(notification, bundle);
|
||||||
|
notificationStyle(notification, notificationId, bundle);
|
||||||
|
notificationReply(notification, notificationId, bundle);
|
||||||
|
notificationDismiss(notification, notificationId);
|
||||||
|
|
||||||
|
return notification;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notifyReceivedToJS() {
|
||||||
|
mJsIOHelper.sendEventToJS(NOTIFICATION_RECEIVED_EVENT_NAME, mNotificationProps.asBundle(), mAppLifecycleFacade.getRunningReactContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Bitmap getAvatar(String uri) {
|
||||||
|
try {
|
||||||
|
return Glide.with(mContext)
|
||||||
|
.asBitmap()
|
||||||
|
.apply(RequestOptions.bitmapTransform(new RoundedCorners(10)))
|
||||||
|
.load(uri)
|
||||||
|
.submit(100, 100)
|
||||||
|
.get();
|
||||||
|
} catch (final ExecutionException | InterruptedException e) {
|
||||||
|
return largeIcon();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Bitmap largeIcon() {
|
||||||
|
final Resources res = mContext.getResources();
|
||||||
|
String packageName = mContext.getPackageName();
|
||||||
|
int largeIconResId = res.getIdentifier("ic_launcher", "mipmap", packageName);
|
||||||
|
Bitmap largeIconBitmap = BitmapFactory.decodeResource(res, largeIconResId);
|
||||||
|
return largeIconBitmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notificationIcons(Notification.Builder notification, Bundle bundle) {
|
||||||
|
final Resources res = mContext.getResources();
|
||||||
|
String packageName = mContext.getPackageName();
|
||||||
|
|
||||||
|
int smallIconResId = res.getIdentifier("ic_notification", "mipmap", packageName);
|
||||||
|
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Ejson ejson = gson.fromJson(bundle.getString("ejson", "{}"), Ejson.class);
|
||||||
|
|
||||||
|
notification.setSmallIcon(smallIconResId);
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||||
|
notification.setLargeIcon(getAvatar(ejson.getAvatarUri()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notificationChannel(Notification.Builder notification) {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
String CHANNEL_ID = "rocketchatrn_channel_01";
|
||||||
|
String CHANNEL_NAME = "All";
|
||||||
|
|
||||||
|
NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
|
||||||
|
CHANNEL_NAME,
|
||||||
|
NotificationManager.IMPORTANCE_DEFAULT);
|
||||||
|
|
||||||
|
final NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
notificationManager.createNotificationChannel(channel);
|
||||||
|
|
||||||
|
notification.setChannelId(CHANNEL_ID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String extractMessage(String message, Ejson ejson) {
|
||||||
|
if (ejson.type != null && !ejson.type.equals("d")) {
|
||||||
|
int pos = message.indexOf(":");
|
||||||
|
int start = pos == -1 ? 0 : pos + 2;
|
||||||
|
return message.substring(start, message.length());
|
||||||
|
}
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notificationColor(Notification.Builder notification) {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
notification.setColor(mContext.getColor(R.color.notification_text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notificationStyle(Notification.Builder notification, int notId, Bundle bundle) {
|
||||||
|
List<Bundle> bundles = notificationMessages.get(Integer.toString(notId));
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||||
|
Notification.InboxStyle messageStyle = new Notification.InboxStyle();
|
||||||
|
if (bundles != null) {
|
||||||
|
for (int i = 0; i < bundles.size(); i++) {
|
||||||
|
Bundle data = bundles.get(i);
|
||||||
|
String message = data.getString("message");
|
||||||
|
|
||||||
|
messageStyle.addLine(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
notification.setStyle(messageStyle);
|
||||||
|
} else {
|
||||||
|
Notification.MessagingStyle messageStyle;
|
||||||
|
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Ejson ejson = gson.fromJson(bundle.getString("ejson", "{}"), Ejson.class);
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
|
||||||
|
messageStyle = new Notification.MessagingStyle("");
|
||||||
|
} else {
|
||||||
|
Person sender = new Person.Builder()
|
||||||
|
.setKey("")
|
||||||
|
.setName("")
|
||||||
|
.build();
|
||||||
|
messageStyle = new Notification.MessagingStyle(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
String title = bundle.getString("title");
|
||||||
|
messageStyle.setConversationTitle(title);
|
||||||
|
|
||||||
|
if (bundles != null) {
|
||||||
|
for (int i = 0; i < bundles.size(); i++) {
|
||||||
|
Bundle data = bundles.get(i);
|
||||||
|
|
||||||
|
long timestamp = data.getLong("time");
|
||||||
|
String message = data.getString("message");
|
||||||
|
String username = data.getString("username");
|
||||||
|
String senderId = data.getString("senderId");
|
||||||
|
String avatarUri = data.getString("avatarUri");
|
||||||
|
|
||||||
|
String m = extractMessage(message, ejson);
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
|
||||||
|
messageStyle.addMessage(m, timestamp, username);
|
||||||
|
} else {
|
||||||
|
Person sender = new Person.Builder()
|
||||||
|
.setKey(senderId)
|
||||||
|
.setName(username)
|
||||||
|
.setIcon(Icon.createWithBitmap(getAvatar(avatarUri)))
|
||||||
|
.build();
|
||||||
|
messageStyle.addMessage(m, timestamp, sender);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
notification.setStyle(messageStyle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notificationReply(Notification.Builder notification, int notificationId, Bundle bundle) {
|
||||||
|
String notId = bundle.getString("notId", "1");
|
||||||
|
String ejson = bundle.getString("ejson", "{}");
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N || notId.equals("1") || ejson.equals("{}")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String label = "Reply";
|
||||||
|
|
||||||
|
final Resources res = mContext.getResources();
|
||||||
|
String packageName = mContext.getPackageName();
|
||||||
|
int smallIconResId = res.getIdentifier("ic_notification", "mipmap", packageName);
|
||||||
|
|
||||||
|
Intent replyIntent = new Intent(mContext, ReplyBroadcast.class);
|
||||||
|
replyIntent.setAction(KEY_REPLY);
|
||||||
|
replyIntent.putExtra("pushNotification", bundle);
|
||||||
|
|
||||||
|
PendingIntent replyPendingIntent = PendingIntent.getBroadcast(mContext, notificationId, replyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
|
||||||
|
|
||||||
|
RemoteInput remoteInput = new RemoteInput.Builder(KEY_REPLY)
|
||||||
|
.setLabel(label)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
CharSequence title = label;
|
||||||
|
Notification.Action replyAction = new Notification.Action.Builder(smallIconResId, title, replyPendingIntent)
|
||||||
|
.addRemoteInput(remoteInput)
|
||||||
|
.setAllowGeneratedReplies(true)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
notification
|
||||||
|
.setShowWhen(true)
|
||||||
|
.addAction(replyAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void notificationDismiss(Notification.Builder notification, int notificationId) {
|
||||||
|
Intent intent = new Intent(mContext, DismissNotification.class);
|
||||||
|
intent.putExtra(NOTIFICATION_ID, notificationId);
|
||||||
|
|
||||||
|
PendingIntent dismissPendingIntent = PendingIntent.getBroadcast(mContext, notificationId, intent, 0);
|
||||||
|
|
||||||
|
notification.setDeleteIntent(dismissPendingIntent);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package chat.rocket.whitelabel;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
|
||||||
|
public class DismissNotification extends BroadcastReceiver {
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
int notId = intent.getExtras().getInt(CustomPushNotification.NOTIFICATION_ID);
|
||||||
|
CustomPushNotification.clearMessages(notId);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package chat.rocket.whitelabel;
|
||||||
|
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
|
||||||
|
import chat.rocket.userdefaults.RNUserDefaultsModule;
|
||||||
|
|
||||||
|
public class Ejson {
|
||||||
|
String host;
|
||||||
|
String rid;
|
||||||
|
String type;
|
||||||
|
Sender sender;
|
||||||
|
|
||||||
|
private String TOKEN_KEY = "reactnativemeteor_usertoken-";
|
||||||
|
private SharedPreferences sharedPreferences = RNUserDefaultsModule.getPreferences(CustomPushNotification.reactApplicationContext);
|
||||||
|
|
||||||
|
public String getAvatarUri() {
|
||||||
|
if (type == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return serverURL() + "/avatar/" + this.sender.username + "?rc_token=" + token() + "&rc_uid=" + userId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String token() {
|
||||||
|
return sharedPreferences.getString(TOKEN_KEY.concat(userId()), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String userId() {
|
||||||
|
return sharedPreferences.getString(TOKEN_KEY.concat(serverURL()), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String serverURL() {
|
||||||
|
String url = this.host;
|
||||||
|
if (url != null && url.endsWith("/")) {
|
||||||
|
url = url.substring(0, url.length() - 1);
|
||||||
|
}
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Sender {
|
||||||
|
String username;
|
||||||
|
String _id;
|
||||||
|
}
|
||||||
|
}
|