first commit

This commit is contained in:
Philip Cheung 2024-02-27 16:49:28 +08:00
commit b51de8b13c
535 changed files with 108525 additions and 0 deletions

6
.buckconfig Normal file
View File

@ -0,0 +1,6 @@
[android]
target = Google Inc.:Google APIs:23
[maven_repositories]
central = https://repo1.maven.org/maven2

4
.eslintrc.js Normal file
View File

@ -0,0 +1,4 @@
module.exports = {
root: true,
extends: '@react-native-community',
};

73
.flowconfig Normal file
View File

@ -0,0 +1,73 @@
[ignore]
; We fork some components by platform
.*/*[.]android.js
; Ignore "BUCK" generated dirs
<PROJECT_ROOT>/\.buckd/
; Ignore polyfills
node_modules/react-native/Libraries/polyfills/.*
; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/warning')
node_modules/warning/.*
; Flow doesn't support platforms
.*/Libraries/Utilities/LoadingView.js
[untyped]
.*/node_modules/@react-native-community/cli/.*/.*
[include]
[libs]
node_modules/react-native/interface.js
node_modules/react-native/flow/
[options]
emoji=true
esproposal.optional_chaining=enable
esproposal.nullish_coalescing=enable
module.file_ext=.js
module.file_ext=.json
module.file_ext=.ios.js
munge_underscores=true
module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1'
module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
suppress_type=$FlowIssue
suppress_type=$FlowFixMe
suppress_type=$FlowFixMeProps
suppress_type=$FlowFixMeState
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
[lints]
sketchy-null-number=warn
sketchy-null-mixed=warn
sketchy-number=warn
untyped-type-import=warn
nonstrict-import=warn
deprecated-type=warn
unsafe-getters-setters=warn
unnecessary-invariant=warn
signature-verification-failure=warn
deprecated-utility=error
[strict]
deprecated-type
nonstrict-import
sketchy-null
unclear-type
unsafe-getters-setters
untyped-import
untyped-type-import
[version]
^0.122.0

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.pbxproj -text

59
.gitignore vendored Normal file
View File

@ -0,0 +1,59 @@
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/
*/fastlane/report.xml
*/fastlane/Preview.html
*/fastlane/screenshots
# Bundle artifact
*.jsbundle
# CocoaPods
/ios/Pods/

6
.prettierrc.js Normal file
View File

@ -0,0 +1,6 @@
module.exports = {
bracketSpacing: false,
jsxBracketSameLine: true,
singleQuote: true,
trailingComma: 'all',
};

1
.watchmanconfig Normal file
View File

@ -0,0 +1 @@
{}

254
App.js Normal file
View File

@ -0,0 +1,254 @@
//ios Certificates key : rentchatYs962816
// twilio
// FRIENDLY NAME : rentchat
// SID : SKd9452f332bc79084af9b03b8098c18cd
// KEY TYPE : Standard
// SECRET : ImrUyVKfoQqGxC7xuBbhCcIfCePBIlU0
import React, {Component} from 'react';
import {StatusBar, Platform, Text, TextInput} from 'react-native';
import {
SafeAreaView,
createStackNavigator,
createAppContainer,
} from 'react-navigation';
import Router from './src/router';
import JMessage from 'jmessage-react-plugin';
import {colors} from './src/assets/styles/colors-theme';
import {handleNavigationChange} from './src/common/history';
import LoadingView from './src/common/loading';
import {Provider, observer} from 'mobx-react';
import NavigationService from './src/services/NavigationService';
import JPush from 'jpush-react-native';
import stores from './src/store';
import {
checkNotifications,
requestNotifications,
} from 'react-native-permissions';
//import * as stores from './src/stores/index';
import {handleErrors} from './src/common/global-error-handler';
import Event from './src/common/event';
import PushService from './src/common/PushService';
import NotifService from './src/common/NotifService';
@observer
export default class App extends Component {
constructor(props) {
super(props);
Text.defaultProps = Text.defaultProps || {};
TextInput.defaultProps = TextInput.defaultProps || {};
// Ignore dynamic type scaling on iOS
Text.defaultProps.allowFontScaling = false;
TextInput.defaultProps.allowFontScaling = false;
this.timer = null;
this.state = {
loadingCount: 0,
};
//this.notif = new NotifService(this.onRegister.bind(this));
// require('promise/setimmediate/rejection-tracking').enable({
// allRejections: true,
// onUnhandled: (id, error) => {
// handleErrors(error);
// }
// })
// this._handleGlobalError = this.handleGlobalError.bind(this)
// this._handleShowLoading = this.handleShowLoading.bind(this)
// this._handleHideLoading = this.handleHideLoading.bind(this)
}
checkPermission() {
checkNotifications().then(({status, settings}) => {
console.log(status);
if (status == 'DENIED') {
this.requestNotifications();
}
});
}
requestNotifications() {
requestNotifications([
'alert',
'sound',
'badge',
]).then(({status, settings}) => {});
}
async componentWillMount() {}
notificationClickAction(data) {
console.log(data);
if (data.hasOwnProperty('extras')) {
console.log('oh...');
if (data.extras.hasOwnProperty('_j_type')) {
if (data.extras._j_type == 'jmessage') {
if (data.notificationEventType == 'notificationOpened') {
console.log(data.extras.custom.id);
console.log(data.extras.custom.type);
console.log(data.extras.custom.nickname);
if (data.extras.custom.type == 'group') {
var data = {
id: data.extras.custom.id,
type: 'group',
nickname: 'Helper',
};
try {
NavigationService.navigate('chat', {conversation: data});
} catch (error) {
console.log(error);
}
} else {
var data = {
username: data.extras.custom.id,
type: 'single',
nickname: data.extras.custom.nickname,
};
try {
NavigationService.navigate('chat', {conversation: data});
} catch (error) {
console.log(error);
}
}
}
}
}
}
}
async componentDidMount() {
await this.checkPermission();
var params = {
appkey: '89d24c00f8f896623e0bccef',
isOpenMessageRoaming: false,
isProduction: true,
channel: '',
};
await JMessage.init(params);
await JPush.init();
JMessage.getUserInfo(
{
username: '4dbc5b294f184772a043573d7ad9b8c8',
appKey: '89d24c00f8f896623e0bccef',
},
userInfo => {
// do something.
console.log(userInfo);
},
error => {
var code = error.code;
var desc = error.description;
},
);
JMessage.setDebugMode({enable: false});
JMessage.setBadge(0, success => {});
JMessage.getMyInfo(myInfo => {
if (myInfo.username) {
} else {
console.log(myInfo);
}
});
JMessage.addSyncOfflineMessageListener(message => {
console.log(
'| JIGUANG |===addSyncOfflineMessageListener====' +
JSON.stringify(message),
);
});
this.connectListener = result => {
console.log('connectListener:' + JSON.stringify(result));
};
JPush.addNotificationListener(result => {
console.log(`notificationListener: ${JSON.stringify(result)}`);
this.notificationClickAction(result);
});
JPush.addCustomMessagegListener(result => {
console.log(`customMessageListener: ${JSON.stringify(result)}`);
});
//PushService.configure()
// 监听全局报错
// Event.listen('GLOBAL_ERROR', this._handleGlobalError, this)
// 显示加载动画
// Event.listen('SHOW_LOADING', this._handleShowLoading, this)
// 隐藏加载动画
// Event.listen('HIDE_LOADING', this._handleHideLoading, this)
}
//组件卸载之前移除监听
componentWillUnmount() {
// Event.remove('GLOBAL_ERROR', this)
//Event.remove('SHOW_LOADING', this)
// Event.remove('HIDE_LOADING', this)
// JPush.removeListener(result => {
// console.log(`remove listener: ${JSON.stringify(result)}`);
// });
}
onRegister(token) {
console.log(token);
}
onNotif(notif) {
console.log(notif);
}
render() {
return (
<Provider {...stores}>
<SafeAreaView
style={{flex: 1, backgroundColor: colors.mainColor}}
forceInset={{
top: 'always',
bottom: 'always',
}}>
<StatusBar
animated={true}
barStyle={'light-content'}
backgroundColor={colors.mainColor}
translucent={true}
/>
<Router
onNavigationStateChange={handleNavigationChange}
ref={navigatorRef => {
NavigationService.setTopLevelNavigator(navigatorRef);
}}
/>
<LoadingView visible={this.state.loadingCount > 0} />
</SafeAreaView>
</Provider>
);
}
/**
* showLoading
*/
handleShowLoading() {
if (this.timer) {
clearTimeout(this.timer);
}
this.timer = setTimeout(() => {
this.setState({
loadingCount: this.state.loadingCount + 1,
});
}, 50);
}
/**
* hideLoading
* @param bForece
*/
handleHideLoading(bForece) {
if (this.timer) {
clearTimeout(this.timer);
}
this.timer = setTimeout(() => {
if (this.state.loadingCount > 0) {
this.setState({
loadingCount: bForece ? 0 : this.state.loadingCount - 1,
});
}
}, 50);
}
}

6
AuthKey_B6LJQ88G44.p8 Normal file
View File

@ -0,0 +1,6 @@
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgRdoZOqwblY00OEmY
c0Yoo74RwTBSvzLmRiuO1rUBWb+gCgYIKoZIzj0DAQehRANCAASa37Z5ZdZ2w9YZ
tFoOkqGNbN+TrkRuJ03qggxpC1D5S2eQtJJ2iWf42JR+jHXb5HuOCQRxpQPsa3Cr
kdTNynO3
-----END PRIVATE KEY-----

View File

@ -0,0 +1,16 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICjDCCAXQCAQAwRzEnMCUGCSqGSIb3DQEJARYYcGhpbGlwLmNoZXVuZ0BuaXJv
bnMuY29tMQ8wDQYDVQQDDAZwaGlsaXAxCzAJBgNVBAYTAkhLMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqFjySinOVdAYMKcaUN6bqBssHQbqbDC/oknV
hgS2YnJd2PmRwrVgx9v3/RucnVHxFkjtcT3JbZgnS4AUo3uGKU7tDkM39ZGWBqun
lWeFC5a3t7anZjlk38fwftBg99HZPkQ3kVrZVQtKraKtzETLngHOKKlCvcNWT0+o
L+Dv+HWKalbNt9u9TK8bEhZQKKoqknjyueHPxjEfBN79eLhjFCAlVl0VkcJngW4V
kCyl+csEQvnmncvQBotU5VVJlD5kFU799VscdMRq+GQ03SFYam/zC9atfR7gEiaD
lU4223jB1mTD2WoDnDwgBoUXypR9wZfQQUe2fcrhRCYBMj8nPwIDAQABoAAwDQYJ
KoZIhvcNAQELBQADggEBACPSAG0udA1y93TgtDmSMA3TeoMZvLUL4uQyGPRbp/uW
89nyn9zUVEpBcWxUFqcDevpDRP7yczNxT2a8VmJ/efNE0WkGPgCtZBfjsegdEJNa
NoPhqpVFn7TrS+Zk9frFXJHq7MLeuTowLZ8DCUFQ5YdiunvdcwHbMAyQxN/7J5t1
2fHUTQLZFIi8WMNI2TLcelOoZjJM8FWfxuUTaAmwnDhogNFo05bbEH1/6aUE7TW2
a2WzRTk7tDKIrKaZZcPBKTj8ItxIVf85lEKFa9T6mfIAU/bDcLH77pqdDPqR8aYf
QwnJvH1KmEl3OdsPjd9sghNE/ef7hi7EmMq58uXPCVE=
-----END CERTIFICATE REQUEST-----

98
README.md Normal file
View File

@ -0,0 +1,98 @@
## Rent Chat
## Description
This mobile application is primarily designed for communication between tenants and landlords. Users can input their property information within the app, and tenants can connect with landlords using an invitation code to facilitate communication. The main features of the app include online chat, intelligent lease agreements, property listings, rent reminders, feedback on property issues to landlords, online payments, and renovation services.
### Screenshot
<img src="./src/assets/screenshot/1.jpeg" width="40%" height="40%">
<img src="./src/assets/screenshot/2.jpeg" width="40%" height="40%">
<img src="./src/assets/screenshot/3.jpeg" width="40%" height="40%">
<img src="./src/assets/screenshot/4.jpeg" width="40%" height="40%">
<img src="./src/assets/screenshot/5.jpeg" width="40%" height="40%">
<img src="./src/assets/screenshot/6.jpeg" width="40%" height="40%">
<img src="./src/assets/screenshot/7.jpeg" width="40%" height="40%">
<img src="./src/assets/screenshot/8.jpeg" width="40%" height="40%">
<img src="./src/assets/screenshot/9.jpeg" width="40%" height="40%">
<img src="./src/assets/screenshot/10.jpeg" width="40%" height="40%">
<img src="./src/assets/screenshot/11.jpeg" width="40%" height="40%">
<img src="./src/assets/screenshot/banner.png" >
This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli).
# Getting Started
>**Note**: Make sure you have completed the [React Native - Environment Setup](https://reactnative.dev/docs/environment-setup) instructions till "Creating a new application" step, before proceeding.
## Step 1: Start the Metro Server
First, you will need to start **Metro**, the JavaScript _bundler_ that ships _with_ React Native.
To start Metro, run the following command from the _root_ of your React Native project:
```bash
# using npm
npm start
# OR using Yarn
yarn start
```
## Step 2: Start your Application
Let Metro Bundler run in its _own_ terminal. Open a _new_ terminal from the _root_ of your React Native project. Run the following command to start your _Android_ or _iOS_ app:
### For Android
```bash
# using npm
npm run android
# OR using Yarn
yarn android
```
### For iOS
```bash
# using npm
npm run ios
# OR using Yarn
yarn ios
```
If everything is set up _correctly_, you should see your new app running in your _Android Emulator_ or _iOS Simulator_ shortly provided you have set up your emulator/simulator correctly.
This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively.
## Step 3: Modifying your App
Now that you have successfully run the app, let's modify it.
1. Open `App.tsx` in your text editor of choice and edit some lines.
2. For **Android**: Press the <kbd>R</kbd> key twice or select **"Reload"** from the **Developer Menu** (<kbd>Ctrl</kbd> + <kbd>M</kbd> (on Window and Linux) or <kbd>Cmd ⌘</kbd> + <kbd>M</kbd> (on macOS)) to see your changes!
For **iOS**: Hit <kbd>Cmd ⌘</kbd> + <kbd>R</kbd> in your iOS Simulator to reload the app and see your changes!
## Congratulations! :tada:
You've successfully run and modified your React Native App. :partying_face:
### Now what?
- If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps).
- If you're curious to learn more about React Native, check out the [Introduction to React Native](https://reactnative.dev/docs/getting-started).
# Troubleshooting
If you can't get this to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page.
# Learn More
To learn more about React Native, take a look at the following resources:
- [React Native Website](https://reactnative.dev) - learn more about React Native.
- [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment.
- [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**.
- [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts.
- [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native.

14
__tests__/App-test.js Normal file
View File

@ -0,0 +1,14 @@
/**
* @format
*/
import 'react-native';
import React from 'react';
import App from '../App';
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';
it('renders correctly', () => {
renderer.create(<App />);
});

4
app.json Normal file
View File

@ -0,0 +1,4 @@
{
"name": "rentchat",
"displayName": "rentchat"
}

BIN
aps.cer Executable file

Binary file not shown.

BIN
aps_development.cer Executable file

Binary file not shown.

8
babel.config copy.js Normal file
View File

@ -0,0 +1,8 @@
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
plugins: [
['@babel/plugin-transform-flow-strip-types'],
['@babel/plugin-proposal-decorators', {legacy: true}],
['@babel/plugin-proposal-class-properties', {loose: true}],
],
};

3
babel.config.js Normal file
View File

@ -0,0 +1,3 @@
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
};

BIN
base-2.6.1.301.aar Normal file

Binary file not shown.

10
index copy.js Executable file
View File

@ -0,0 +1,10 @@
/**
* @format
*/
import 'react-native-gesture-handler';
import {AppRegistry} from 'react-native';
import App from './App';
import {name as appName} from './app.json';
console.disableYellowBox = true;
AppRegistry.registerComponent(appName, () => App);

9
index.js Normal file
View File

@ -0,0 +1,9 @@
/**
* @format
*/
import {AppRegistry} from 'react-native';
import App from './App';
import {name as appName} from './app.json';
AppRegistry.registerComponent(appName, () => App);

20
metro.config copy.js Normal file
View File

@ -0,0 +1,20 @@
/**
* Metro configuration for React Native
* https://github.com/facebook/react-native
*
* @format
*/
module.exports = {
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: false,
babelTransformerPath: require.resolve(
'react-native-typescript-transformer',
),
},
}),
},
};

17
metro.config.js Normal file
View File

@ -0,0 +1,17 @@
/**
* Metro configuration for React Native
* https://github.com/facebook/react-native
*
* @format
*/
module.exports = {
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: false,
},
}),
},
};

14944
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

127
package.json Normal file
View File

@ -0,0 +1,127 @@
{
"name": "rentchat",
"version": "0.0.1",
"private": true,
"rnpm": {
"assets": [
"./src/assets/"
]
},
"scripts": {
"android": "react-native run-android",
"ios": "react-native run-ios",
"start": "react-native start",
"test": "jest",
"lint": "eslint ."
},
"dependencies": {
"@babel/plugin-proposal-decorators": "^7.12.1",
"@invertase/react-native-apple-authentication": "^2.1.0",
"@react-native-community/async-storage": "^1.12.1",
"@react-native-community/cameraroll": "^4.0.1",
"@react-native-community/datetimepicker": "^3.0.4",
"@react-native-community/google-signin": "^5.0.0",
"@react-native-community/image-editor": "^2.3.0",
"@react-native-community/masked-view": "^0.1.10",
"@react-native-community/netinfo": "^5.9.7",
"@react-native-community/push-notification-ios": "^1.7.3",
"@react-native-community/toolbar-android": "0.1.0-rc.2",
"@react-native-community/viewpager": "^4.2.0",
"aurora-imui-react-native": "^0.14.0",
"axios": "^0.21.0",
"babel-plugin-transform-decorators-legacy": "^1.3.5",
"fetch-intercept": "^2.3.1",
"jcore-react-native": "^1.9.0",
"jmessage-react-plugin": "^3.1.8",
"jpush-react-native": "^2.8.1",
"lodash": "^4.17.20",
"lottie-react-native": "^3.5.0",
"mobx": "^6.0.3",
"mobx-persist": "^0.4.1",
"mobx-react": "^7.0.4",
"mobx-react-form": "^2.0.9",
"moment": "^2.29.1",
"react": "16.13.1",
"react-native": "0.63.3",
"react-native-amazing-cropper": "^0.1.4",
"react-native-app-intro-slider": "^4.0.4",
"react-native-autocomplete-input": "^4.2.0",
"react-native-blink-view": "0.0.6",
"react-native-check-box": "^2.1.7",
"react-native-country-picker-modal": "^2.0.0",
"react-native-credit-card-input": "^0.4.1",
"react-native-dark-mode": "^0.2.2",
"react-native-device-info": "^7.0.2",
"react-native-document-picker": "^4.1.0",
"react-native-easy-toast": "^1.2.0",
"react-native-elements": "^3.0.0-alpha.1",
"react-native-fast-image": "^8.3.3",
"react-native-fbsdk": "^2.0.0",
"react-native-fs": "^2.16.6",
"react-native-gesture-handler": "^1.8.0",
"react-native-html-to-pdf": "^0.8.0",
"react-native-htmlview": "^0.16.0",
"react-native-image-crop-picker": "^0.35.1",
"react-native-image-pan-zoom": "^2.1.12",
"react-native-image-rotate": "^2.1.0",
"react-native-image-to-pdf": "^1.2.0",
"react-native-image-viewing": "^0.2.0",
"react-native-keyboard-aware-scroll-view": "^0.9.3",
"react-native-linear-gradient": "^2.5.6",
"react-native-md5": "^1.0.0",
"react-native-modal-datetime-picker": "^9.0.0",
"react-native-modals": "^0.19.9",
"react-native-paper": "^4.3.1",
"react-native-pdf": "^6.2.2",
"react-native-permissions": "^2.2.2",
"react-native-picker-js": "^1.1.2",
"react-native-picker-select": "^8.0.2",
"react-native-popup-menu": "^0.15.9",
"react-native-push-notification": "^6.1.3",
"react-native-reanimated": "^1.13.1",
"react-native-render-html": "^4.2.4",
"react-native-rss-parser": "^1.5.1",
"react-native-safe-area-context": "^3.1.8",
"react-native-safe-area-view": "^1.1.1",
"react-native-screens": "^2.14.0",
"react-native-share": "^4.1.0",
"react-native-signature-capture": "^0.4.10",
"react-native-simple-radio-button": "^2.7.4",
"react-native-size-matters": "^0.3.1",
"react-native-sound": "^0.11.0",
"react-native-step-indicator": "^1.0.3",
"react-native-svg": "^12.1.0",
"react-native-swiper": "^1.6.0",
"react-native-switch-pro": "^1.0.5",
"react-native-tab-view": "^2.15.2",
"react-native-typescript-transformer": "^1.2.13",
"react-native-uuid": "^1.4.9",
"react-native-vector-icons": "^7.1.0",
"react-native-video": "^5.1.0-alpha8",
"react-native-view-shot": "^3.1.2",
"react-native-webview": "^10.10.2",
"react-native-wechat": "^1.9.12",
"react-navigation": "^4.4.3",
"react-navigation-material-bottom-tabs": "^2.3.3",
"react-navigation-stack": "^2.10.1",
"react-navigation-tabs": "^2.10.1",
"react-navigation-transitions": "^1.0.12",
"rn-countdown": "^1.0.0",
"rn-fetch-blob": "^0.12.0",
"valid-url": "^1.0.9",
"validatorjs": "^3.20.0"
},
"devDependencies": {
"@babel/core": "^7.8.4",
"@babel/runtime": "^7.8.4",
"@react-native-community/eslint-config": "^1.1.0",
"babel-jest": "^25.1.0",
"eslint": "^6.5.1",
"jest": "^25.1.0",
"metro-react-native-babel-preset": "^0.59.0",
"react-test-renderer": "16.13.1"
},
"jest": {
"preset": "react-native"
}
}

BIN
push-2.6.1.301.aar Normal file

Binary file not shown.

11
react-native.config.js Normal file
View File

@ -0,0 +1,11 @@
module.exports = {
dependencies: {
'jmessage-react-plugin': {
platforms: {
android: {
packageInstance: 'new JMessageReactPackage(false)',
},
},
},
},
};

BIN
rentChatNotificationCert.p12 Executable file

Binary file not shown.

116
rentChatNotificationCert.pem Executable file
View File

@ -0,0 +1,116 @@
Bag Attributes
friendlyName: 7788 dev key
localKeyID: 21 47 E5 7F FE 5A 1D 4B 63 22 DA C1 14 0E 5B 65 E0 AE DD 67
subject=/CN=7788 dev key/C=HK/emailAddress=philip.cheung@nirons.com
issuer=/CN=7788 dev key/C=HK/emailAddress=philip.cheung@nirons.com
-----BEGIN CERTIFICATE-----
MIIDZDCCAkygAwIBAgIBATANBgkqhkiG9w0BAQsFADBNMRUwEwYDVQQDDAw3Nzg4
IGRldiBrZXkxCzAJBgNVBAYTAkhLMScwJQYJKoZIhvcNAQkBFhhwaGlsaXAuY2hl
dW5nQG5pcm9ucy5jb20wHhcNMTkxMTA0MDIwODI0WhcNMjAxMTAzMDIwODI0WjBN
MRUwEwYDVQQDDAw3Nzg4IGRldiBrZXkxCzAJBgNVBAYTAkhLMScwJQYJKoZIhvcN
AQkBFhhwaGlsaXAuY2hldW5nQG5pcm9ucy5jb20wggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQClR8euadir+78GoN0JRitD59H3tm5M+PpdJiWw/7gsyckN
nYosF9Wu1oRKsIO8Z8FZAfOT2NAMNOMmfXsS7H29XhHU0A/c4UkBUXmi8BlHqsIm
ULncrge3IVZ8RcLhVkIKWy/fzaIjZNtsI2A4EHA/Y1U3sHVHBfHPdG0STouERpDg
/+qUz734zTsPqhyCsB4YfEiLjacjkj9hPjAXgLLHTv9urkOXT0F14CtDWAA8fbDT
fox9kwQIf5J4hGa6iPgNw9IwMD0eObwCpPCqg9iHs8mLWObLv5NJ7jz2WzicJpM5
xiZb+PfNbo+pOuEAFlIQRhs7xXYTjx7QCY+WiWkLAgMBAAGjTzBNMA4GA1UdDwEB
/wQEAwIFoDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDBDAjBgNVHREEHDAagRhwaGls
aXAuY2hldW5nQG5pcm9ucy5jb20wDQYJKoZIhvcNAQELBQADggEBAIrRiHsH61Z/
UgnxoQBFVKG1+IWm/1GENhizlPslkKsysHqX5StAPYNBZIwCd6muG8rd5GDNXv+2
xsZ+BX+YCb6j1o+0xz77J2NHJXYaxT8tmXHJCO8ustMc6Nj+pYEuTWbOE6ljbRsB
VCGjeihk1l/ljYn0cD2ALcxUJm/1rar4udZNkXN+zWf68W5/sfMOLnhxNaImVQpI
Jvx67G1cs6kM3sFwnnMbYkJRdyFs+RWlopq43ylYifo2g5MLAMv3ra3Fn8BWuT9O
eopd3dO9ALyi70iZ7fZGdYYHI9oJqIodZ644o3Lf6WxIF35+8jIrL6iLNc0E2ZO4
zWqYBNJS+v8=
-----END CERTIFICATE-----
Bag Attributes
friendlyName: 7788 dev key
localKeyID: 21 47 E5 7F FE 5A 1D 4B 63 22 DA C1 14 0E 5B 65 E0 AE DD 67
subject=/CN=7788 dev key/C=HK/emailAddress=philip.cheung@nirons.com
issuer=/CN=7788 dev key/C=HK/emailAddress=philip.cheung@nirons.com
-----BEGIN CERTIFICATE-----
MIIDZDCCAkygAwIBAgIBATANBgkqhkiG9w0BAQsFADBNMRUwEwYDVQQDDAw3Nzg4
IGRldiBrZXkxCzAJBgNVBAYTAkhLMScwJQYJKoZIhvcNAQkBFhhwaGlsaXAuY2hl
dW5nQG5pcm9ucy5jb20wHhcNMTkxMTA0MDIwODI0WhcNMjAxMTAzMDIwODI0WjBN
MRUwEwYDVQQDDAw3Nzg4IGRldiBrZXkxCzAJBgNVBAYTAkhLMScwJQYJKoZIhvcN
AQkBFhhwaGlsaXAuY2hldW5nQG5pcm9ucy5jb20wggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQClR8euadir+78GoN0JRitD59H3tm5M+PpdJiWw/7gsyckN
nYosF9Wu1oRKsIO8Z8FZAfOT2NAMNOMmfXsS7H29XhHU0A/c4UkBUXmi8BlHqsIm
ULncrge3IVZ8RcLhVkIKWy/fzaIjZNtsI2A4EHA/Y1U3sHVHBfHPdG0STouERpDg
/+qUz734zTsPqhyCsB4YfEiLjacjkj9hPjAXgLLHTv9urkOXT0F14CtDWAA8fbDT
fox9kwQIf5J4hGa6iPgNw9IwMD0eObwCpPCqg9iHs8mLWObLv5NJ7jz2WzicJpM5
xiZb+PfNbo+pOuEAFlIQRhs7xXYTjx7QCY+WiWkLAgMBAAGjTzBNMA4GA1UdDwEB
/wQEAwIFoDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDBDAjBgNVHREEHDAagRhwaGls
aXAuY2hldW5nQG5pcm9ucy5jb20wDQYJKoZIhvcNAQELBQADggEBAIrRiHsH61Z/
UgnxoQBFVKG1+IWm/1GENhizlPslkKsysHqX5StAPYNBZIwCd6muG8rd5GDNXv+2
xsZ+BX+YCb6j1o+0xz77J2NHJXYaxT8tmXHJCO8ustMc6Nj+pYEuTWbOE6ljbRsB
VCGjeihk1l/ljYn0cD2ALcxUJm/1rar4udZNkXN+zWf68W5/sfMOLnhxNaImVQpI
Jvx67G1cs6kM3sFwnnMbYkJRdyFs+RWlopq43ylYifo2g5MLAMv3ra3Fn8BWuT9O
eopd3dO9ALyi70iZ7fZGdYYHI9oJqIodZ644o3Lf6WxIF35+8jIrL6iLNc0E2ZO4
zWqYBNJS+v8=
-----END CERTIFICATE-----
Bag Attributes
friendlyName: 7788 dev key
localKeyID: 21 47 E5 7F FE 5A 1D 4B 63 22 DA C1 14 0E 5B 65 E0 AE DD 67
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQClR8euadir+78G
oN0JRitD59H3tm5M+PpdJiWw/7gsyckNnYosF9Wu1oRKsIO8Z8FZAfOT2NAMNOMm
fXsS7H29XhHU0A/c4UkBUXmi8BlHqsImULncrge3IVZ8RcLhVkIKWy/fzaIjZNts
I2A4EHA/Y1U3sHVHBfHPdG0STouERpDg/+qUz734zTsPqhyCsB4YfEiLjacjkj9h
PjAXgLLHTv9urkOXT0F14CtDWAA8fbDTfox9kwQIf5J4hGa6iPgNw9IwMD0eObwC
pPCqg9iHs8mLWObLv5NJ7jz2WzicJpM5xiZb+PfNbo+pOuEAFlIQRhs7xXYTjx7Q
CY+WiWkLAgMBAAECggEBAIrdl0jUR6agOmyARZZgLUO9h21gCqaDXh9bSLnA8OY4
l8LnxUqsr+1Y8Qer7NMkPY/iEtv6gzpuSRdywDAzIKY1Xjf2pA1J/0OrR859ek/7
iWoV00M1uOfFi9uX5VfcWFpJKR0ZsYuZVr4xrssMDLNFazkB+lc1CGjsAiQqeBAm
u/N8Vfsqgfl1tVu5LryWy/8gReg39vF8oDDr/dksNPfmGbHysX06X1SCgG4AP/X8
LpbAb9v+itP3jJulhR8TVIOx3aTWS9zjWwMr4VXtHkBkJPyk5qvjksSIbOEJ+fTc
z+xopaGEhJRKs6kV9qQ/8eahKVoRh9lQsSs0lO9MfIkCgYEA1dTqUiZF2L8N284G
lEhhkEns+19qWvoO1t67n6X9tthI+RLQulQqfuJxNDenevLqnlrjf5Hf9YVqsi0u
wlQbtTZNQQD1r9yUpswiN/u7UbA9zzcIN0eWhzPzKdLq4Sso+THl9Y2HRpqolQDg
z5dbmph+zD+8b4GnXXghuotIysUCgYEAxd/MmIqBjwd47F4VuWFgXMRrJ1NSdVyH
/T2OfGP7b3nBhT2QidWhwaMnO4RcjR/4/Vv8JYbqmzymFSLrFBhH1jeX4vJx8aj9
ySnG4/yKFj1kpgC2owsaUfCdNID0M+h7Nx4Z3AD+kCcOVv37oAEcBi5gWgVMC2fl
psv73EKV4Y8CgYA+yrhIiV6naGs8acK61op34Y2Kv5kuwBGNfXihSBA6GkdLhP/w
R3j3K63MhK9UxnKpL81wj7ixk40iZ2w8upAsZZbICO0cyGyKkpVV1UFLmrJ74BA0
k3wbleDJHlvE5XSxwLpjojzgOdhZcRmTPEI1IqTRe8HtCKjKJNXavr4QdQKBgBsg
CtP+aLRKufDtFN1M1ADjjCzf5zXfcWTtw1KaAiXN8xFo1x+OAZah3wbxph5Se7d/
nJkoXZDaR4ouNzuR+IcNJ+0cfzI5kFC7QWCPhf52fA2lm2POadVBvssrwk47WGi9
352hJURtljGmr4/Hlyfhw6OThlEp9PlgjS4sko9RAoGABQtBIg9kqv7Q7iRwtn5C
zD7zpuxY91tU5QDgDkMNknrE39o2TGrhGJq/bEIIMhrXBY2CnAIhZgO5nIiXjNbq
gqCDHnU3fCqcpxH5SFyVa1W+ONzBhg4orr64vXzd1fO6BINPFCiLzclUnn+/sBP4
LJGpwr0pEqBHmdhz4tWwv84=
-----END PRIVATE KEY-----
Bag Attributes
friendlyName: 7788 dev key
localKeyID: 21 47 E5 7F FE 5A 1D 4B 63 22 DA C1 14 0E 5B 65 E0 AE DD 67
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQClR8euadir+78G
oN0JRitD59H3tm5M+PpdJiWw/7gsyckNnYosF9Wu1oRKsIO8Z8FZAfOT2NAMNOMm
fXsS7H29XhHU0A/c4UkBUXmi8BlHqsImULncrge3IVZ8RcLhVkIKWy/fzaIjZNts
I2A4EHA/Y1U3sHVHBfHPdG0STouERpDg/+qUz734zTsPqhyCsB4YfEiLjacjkj9h
PjAXgLLHTv9urkOXT0F14CtDWAA8fbDTfox9kwQIf5J4hGa6iPgNw9IwMD0eObwC
pPCqg9iHs8mLWObLv5NJ7jz2WzicJpM5xiZb+PfNbo+pOuEAFlIQRhs7xXYTjx7Q
CY+WiWkLAgMBAAECggEBAIrdl0jUR6agOmyARZZgLUO9h21gCqaDXh9bSLnA8OY4
l8LnxUqsr+1Y8Qer7NMkPY/iEtv6gzpuSRdywDAzIKY1Xjf2pA1J/0OrR859ek/7
iWoV00M1uOfFi9uX5VfcWFpJKR0ZsYuZVr4xrssMDLNFazkB+lc1CGjsAiQqeBAm
u/N8Vfsqgfl1tVu5LryWy/8gReg39vF8oDDr/dksNPfmGbHysX06X1SCgG4AP/X8
LpbAb9v+itP3jJulhR8TVIOx3aTWS9zjWwMr4VXtHkBkJPyk5qvjksSIbOEJ+fTc
z+xopaGEhJRKs6kV9qQ/8eahKVoRh9lQsSs0lO9MfIkCgYEA1dTqUiZF2L8N284G
lEhhkEns+19qWvoO1t67n6X9tthI+RLQulQqfuJxNDenevLqnlrjf5Hf9YVqsi0u
wlQbtTZNQQD1r9yUpswiN/u7UbA9zzcIN0eWhzPzKdLq4Sso+THl9Y2HRpqolQDg
z5dbmph+zD+8b4GnXXghuotIysUCgYEAxd/MmIqBjwd47F4VuWFgXMRrJ1NSdVyH
/T2OfGP7b3nBhT2QidWhwaMnO4RcjR/4/Vv8JYbqmzymFSLrFBhH1jeX4vJx8aj9
ySnG4/yKFj1kpgC2owsaUfCdNID0M+h7Nx4Z3AD+kCcOVv37oAEcBi5gWgVMC2fl
psv73EKV4Y8CgYA+yrhIiV6naGs8acK61op34Y2Kv5kuwBGNfXihSBA6GkdLhP/w
R3j3K63MhK9UxnKpL81wj7ixk40iZ2w8upAsZZbICO0cyGyKkpVV1UFLmrJ74BA0
k3wbleDJHlvE5XSxwLpjojzgOdhZcRmTPEI1IqTRe8HtCKjKJNXavr4QdQKBgBsg
CtP+aLRKufDtFN1M1ADjjCzf5zXfcWTtw1KaAiXN8xFo1x+OAZah3wbxph5Se7d/
nJkoXZDaR4ouNzuR+IcNJ+0cfzI5kFC7QWCPhf52fA2lm2POadVBvssrwk47WGi9
352hJURtljGmr4/Hlyfhw6OThlEp9PlgjS4sko9RAoGABQtBIg9kqv7Q7iRwtn5C
zD7zpuxY91tU5QDgDkMNknrE39o2TGrhGJq/bEIIMhrXBY2CnAIhZgO5nIiXjNbq
gqCDHnU3fCqcpxH5SFyVa1W+ONzBhg4orr64vXzd1fO6BINPFCiLzclUnn+/sBP4
LJGpwr0pEqBHmdhz4tWwv84=
-----END PRIVATE KEY-----

BIN
rentchat.mobileprovision Executable file

Binary file not shown.

BIN
rentchat_char/Tenant.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
rentchat_char/Tenant@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
rentchat_char/Tenant@3x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
rentchat_char/free.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
rentchat_char/free@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
rentchat_char/free@3x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
rentchat_char/owner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
rentchat_char/owner@2x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
rentchat_char/owner@3x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

6
rentchatapplelogin.p8 Normal file
View File

@ -0,0 +1,6 @@
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgFg+OneGGIEhXZT85
uTDuAzOJSCQ6H0La7mYT9oS61kWgCgYIKoZIzj0DAQehRANCAARGi78fvWkdb4q7
27dSU13aXIFJtbq5FhExGliJUMayFtYdfJw97sysB2WcK0mDmih76Zrjzox0Zc7p
UUscgRTL
-----END PRIVATE KEY-----

BIN
rentchatkeystore Normal file

Binary file not shown.

9478
src/assets/building.csv Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 617 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 914 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 787 KiB

BIN
src/assets/images/logo@2x.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
src/assets/images/logo@3x.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

BIN
src/assets/images/news.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 800 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
src/assets/images/owner@2x.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
src/assets/images/owner@3x.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 994 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 563 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 717 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 KiB

BIN
src/assets/images/tenant@2x.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
src/assets/images/tenant@3x.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Some files were not shown because too many files have changed in this diff Show More