├── .editorconfig
├── .gitignore
├── README.md
├── config.xml
├── ionic.config.json
├── package.json
├── resources
├── android
│ ├── icon
│ │ ├── drawable-hdpi-icon.png
│ │ ├── drawable-ldpi-icon.png
│ │ ├── drawable-mdpi-icon.png
│ │ ├── drawable-xhdpi-icon.png
│ │ ├── drawable-xxhdpi-icon.png
│ │ └── drawable-xxxhdpi-icon.png
│ └── splash
│ │ ├── drawable-land-hdpi-screen.png
│ │ ├── drawable-land-ldpi-screen.png
│ │ ├── drawable-land-mdpi-screen.png
│ │ ├── drawable-land-xhdpi-screen.png
│ │ ├── drawable-land-xxhdpi-screen.png
│ │ ├── drawable-land-xxxhdpi-screen.png
│ │ ├── drawable-port-hdpi-screen.png
│ │ ├── drawable-port-ldpi-screen.png
│ │ ├── drawable-port-mdpi-screen.png
│ │ ├── drawable-port-xhdpi-screen.png
│ │ ├── drawable-port-xxhdpi-screen.png
│ │ └── drawable-port-xxxhdpi-screen.png
├── icon.png
├── icon.png.md5
├── ios
│ ├── icon
│ │ ├── icon-40.png
│ │ ├── icon-40@2x.png
│ │ ├── icon-40@3x.png
│ │ ├── icon-50.png
│ │ ├── icon-50@2x.png
│ │ ├── icon-60.png
│ │ ├── icon-60@2x.png
│ │ ├── icon-60@3x.png
│ │ ├── icon-72.png
│ │ ├── icon-72@2x.png
│ │ ├── icon-76.png
│ │ ├── icon-76@2x.png
│ │ ├── icon-83.5@2x.png
│ │ ├── icon-small.png
│ │ ├── icon-small@2x.png
│ │ ├── icon-small@3x.png
│ │ ├── icon.png
│ │ └── icon@2x.png
│ └── splash
│ │ ├── Default-568h@2x~iphone.png
│ │ ├── Default-667h.png
│ │ ├── Default-736h.png
│ │ ├── Default-Landscape-736h.png
│ │ ├── Default-Landscape@2x~ipad.png
│ │ ├── Default-Landscape@~ipadpro.png
│ │ ├── Default-Landscape~ipad.png
│ │ ├── Default-Portrait@2x~ipad.png
│ │ ├── Default-Portrait@~ipadpro.png
│ │ ├── Default-Portrait~ipad.png
│ │ ├── Default@2x~iphone.png
│ │ └── Default~iphone.png
├── splash.png
└── splash.png.md5
├── src
├── app
│ ├── app.component.ts
│ ├── app.html
│ ├── app.module.ts
│ ├── app.scss
│ └── main.ts
├── assets
│ └── icon
│ │ └── favicon.ico
├── index.html
├── manifest.json
├── pages
│ ├── add-data
│ │ ├── add-data.html
│ │ ├── add-data.module.ts
│ │ ├── add-data.scss
│ │ └── add-data.ts
│ ├── edit-data
│ │ ├── edit-data.html
│ │ ├── edit-data.module.ts
│ │ ├── edit-data.scss
│ │ └── edit-data.ts
│ └── home
│ │ ├── home.html
│ │ ├── home.scss
│ │ └── home.ts
├── service-worker.js
└── theme
│ └── variables.scss
├── tsconfig.json
└── tslint.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs
2 | # editorconfig.org
3 |
4 | root = true
5 |
6 | [*]
7 | indent_style = space
8 | indent_size = 2
9 |
10 | # We recommend you to keep these unchanged
11 | end_of_line = lf
12 | charset = utf-8
13 | trim_trailing_whitespace = true
14 | insert_final_newline = true
15 |
16 | [*.md]
17 | trim_trailing_whitespace = false
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Specifies intentionally untracked files to ignore when using Git
2 | # http://git-scm.com/docs/gitignore
3 |
4 | *~
5 | *.sw[mnpcod]
6 | *.log
7 | *.tmp
8 | *.tmp.*
9 | log.txt
10 | *.sublime-project
11 | *.sublime-workspace
12 | .vscode/
13 | npm-debug.log*
14 |
15 | .idea/
16 | .sourcemaps/
17 | .sass-cache/
18 | .tmp/
19 | .versions/
20 | coverage/
21 | dist/
22 | node_modules/
23 | tmp/
24 | temp/
25 | hooks/
26 | platforms/
27 | plugins/
28 | plugins/android.json
29 | plugins/ios.json
30 | www/
31 | $RECYCLE.BIN/
32 |
33 | .DS_Store
34 | Thumbs.db
35 | UserInterfaceState.xcuserstate
36 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Ionic 3, Angular 4 and SQLite CRUD Offline Mobile App
2 |
3 | This source code is part of [Ionic 3, Angular 4 and SQLite CRUD Offline Mobile App](https://www.djamware.com/post/59c53a1280aca768e4d2b143/ionic-3-angular-4-and-sqlite-crud-offline-mobile-app) tutorial.
4 |
5 | If you think this source code is useful, it will be great if you just give it star or just buy me a cup of cofee [](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Q5WK24UVWUGBN)
6 |
7 | To run locally, do the following:
8 | * Clone this repository
9 | * Run `npm install`
10 | * Run `ionic cordova platform rm android`
11 | * Run `ionic cordova platform add android`
12 | * Run `ionic cordova platform rm ios`
13 | * Run `ionic cordova platform add ios`
14 | * RUn `ionic cordova run ios` or `ionic cordova run android`
15 |
--------------------------------------------------------------------------------
/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | My Expense
4 | An awesome Ionic/Cordova app.
5 | Djamware
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
--------------------------------------------------------------------------------
/ionic.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ionic3-sqlite",
3 | "app_id": "",
4 | "type": "ionic-angular",
5 | "integrations": {
6 | "cordova": {}
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ionic3-sqlite",
3 | "version": "0.0.1",
4 | "author": "Ionic Framework",
5 | "homepage": "http://ionicframework.com/",
6 | "private": true,
7 | "scripts": {
8 | "clean": "ionic-app-scripts clean",
9 | "build": "ionic-app-scripts build",
10 | "lint": "ionic-app-scripts lint",
11 | "ionic:build": "ionic-app-scripts build",
12 | "ionic:serve": "ionic-app-scripts serve"
13 | },
14 | "dependencies": {
15 | "@angular/common": "4.1.3",
16 | "@angular/compiler": "4.1.3",
17 | "@angular/compiler-cli": "4.1.3",
18 | "@angular/core": "4.1.3",
19 | "@angular/forms": "4.1.3",
20 | "@angular/http": "4.1.3",
21 | "@angular/platform-browser": "4.1.3",
22 | "@angular/platform-browser-dynamic": "4.1.3",
23 | "@ionic-native/core": "3.12.1",
24 | "@ionic-native/splash-screen": "3.12.1",
25 | "@ionic-native/sqlite": "^4.2.1",
26 | "@ionic-native/status-bar": "3.12.1",
27 | "@ionic-native/toast": "^4.2.1",
28 | "@ionic/storage": "2.0.1",
29 | "cordova-android": "^6.2.3",
30 | "cordova-ios": "^4.4.0",
31 | "cordova-plugin-device": "^1.1.4",
32 | "cordova-plugin-splashscreen": "^4.0.3",
33 | "cordova-plugin-statusbar": "^2.2.2",
34 | "cordova-plugin-whitelist": "^1.3.1",
35 | "cordova-plugin-x-toast": "^2.6.0",
36 | "cordova-sqlite-storage": "^2.0.4",
37 | "ionic-angular": "3.6.1",
38 | "ionic-plugin-keyboard": "^2.2.1",
39 | "ionicons": "3.0.0",
40 | "rxjs": "5.4.0",
41 | "sw-toolbox": "3.6.0",
42 | "zone.js": "0.8.12"
43 | },
44 | "devDependencies": {
45 | "@ionic/app-scripts": "2.1.4",
46 | "typescript": "2.3.4"
47 | },
48 | "description": "An Ionic project",
49 | "cordova": {
50 | "plugins": {
51 | "cordova-sqlite-storage": {},
52 | "cordova-plugin-x-toast": {},
53 | "cordova-plugin-device": {},
54 | "cordova-plugin-splashscreen": {},
55 | "cordova-plugin-statusbar": {},
56 | "cordova-plugin-whitelist": {},
57 | "ionic-plugin-keyboard": {}
58 | },
59 | "platforms": [
60 | "android",
61 | "ios"
62 | ]
63 | }
64 | }
--------------------------------------------------------------------------------
/resources/android/icon/drawable-hdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/icon/drawable-hdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-ldpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/icon/drawable-ldpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-mdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/icon/drawable-mdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-xhdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/icon/drawable-xhdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-xxhdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/icon/drawable-xxhdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/icon/drawable-xxxhdpi-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/icon/drawable-xxxhdpi-icon.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-hdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/splash/drawable-land-hdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-ldpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/splash/drawable-land-ldpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-mdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/splash/drawable-land-mdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-xhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/splash/drawable-land-xhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-xxhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/splash/drawable-land-xxhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-land-xxxhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/splash/drawable-land-xxxhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-hdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/splash/drawable-port-hdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-ldpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/splash/drawable-port-ldpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-mdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/splash/drawable-port-mdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-xhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/splash/drawable-port-xhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-xxhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/splash/drawable-port-xxhdpi-screen.png
--------------------------------------------------------------------------------
/resources/android/splash/drawable-port-xxxhdpi-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/android/splash/drawable-port-xxxhdpi-screen.png
--------------------------------------------------------------------------------
/resources/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/icon.png
--------------------------------------------------------------------------------
/resources/icon.png.md5:
--------------------------------------------------------------------------------
1 | 3f1bbdf1aefcb5ce7b60770ce907c68f
--------------------------------------------------------------------------------
/resources/ios/icon/icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-40.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-40@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-40@3x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-50.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-50@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-60.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-60@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-60@3x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-72.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-72@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-76.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-76@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-83.5@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-small.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-small@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-small@2x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon-small@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon-small@3x.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon.png
--------------------------------------------------------------------------------
/resources/ios/icon/icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/icon/icon@2x.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-568h@2x~iphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/splash/Default-568h@2x~iphone.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-667h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/splash/Default-667h.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-736h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/splash/Default-736h.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Landscape-736h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/splash/Default-Landscape-736h.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Landscape@2x~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/splash/Default-Landscape@2x~ipad.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Landscape@~ipadpro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/splash/Default-Landscape@~ipadpro.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Landscape~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/splash/Default-Landscape~ipad.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Portrait@2x~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/splash/Default-Portrait@2x~ipad.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Portrait@~ipadpro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/splash/Default-Portrait@~ipadpro.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default-Portrait~ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/splash/Default-Portrait~ipad.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default@2x~iphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/splash/Default@2x~iphone.png
--------------------------------------------------------------------------------
/resources/ios/splash/Default~iphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/ios/splash/Default~iphone.png
--------------------------------------------------------------------------------
/resources/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/resources/splash.png
--------------------------------------------------------------------------------
/resources/splash.png.md5:
--------------------------------------------------------------------------------
1 | 0dcf1df8c92c1ece4382d3357d9f8562
--------------------------------------------------------------------------------
/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { Platform } from 'ionic-angular';
3 | import { StatusBar } from '@ionic-native/status-bar';
4 | import { SplashScreen } from '@ionic-native/splash-screen';
5 |
6 | import { HomePage } from '../pages/home/home';
7 | @Component({
8 | templateUrl: 'app.html'
9 | })
10 | export class MyApp {
11 | rootPage:any = HomePage;
12 |
13 | constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {
14 | platform.ready().then(() => {
15 | // Okay, so the platform is ready and our plugins are available.
16 | // Here you can do any higher level native things you might need.
17 | statusBar.styleDefault();
18 | splashScreen.hide();
19 | });
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/app/app.html:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/src/app/app.module.ts:
--------------------------------------------------------------------------------
1 | import { BrowserModule } from '@angular/platform-browser';
2 | import { ErrorHandler, NgModule } from '@angular/core';
3 | import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
4 | import { SplashScreen } from '@ionic-native/splash-screen';
5 | import { StatusBar } from '@ionic-native/status-bar';
6 | import { SQLite } from '@ionic-native/sqlite';
7 | import { Toast } from '@ionic-native/toast';
8 |
9 | import { MyApp } from './app.component';
10 | import { HomePage } from '../pages/home/home';
11 | import { AddDataPage } from '../pages/add-data/add-data';
12 | import { EditDataPage } from '../pages/edit-data/edit-data';
13 |
14 | @NgModule({
15 | declarations: [
16 | MyApp,
17 | HomePage,
18 | AddDataPage,
19 | EditDataPage
20 | ],
21 | imports: [
22 | BrowserModule,
23 | IonicModule.forRoot(MyApp)
24 | ],
25 | bootstrap: [IonicApp],
26 | entryComponents: [
27 | MyApp,
28 | HomePage,
29 | AddDataPage,
30 | EditDataPage
31 | ],
32 | providers: [
33 | StatusBar,
34 | SplashScreen,
35 | {provide: ErrorHandler, useClass: IonicErrorHandler},
36 | SQLite,
37 | Toast
38 | ]
39 | })
40 | export class AppModule {}
41 |
--------------------------------------------------------------------------------
/src/app/app.scss:
--------------------------------------------------------------------------------
1 | // http://ionicframework.com/docs/theming/
2 |
3 |
4 | // App Global Sass
5 | // --------------------------------------------------
6 | // Put style rules here that you want to apply globally. These
7 | // styles are for the entire app and not just one component.
8 | // Additionally, this file can be also used as an entry point
9 | // to import other Sass files to be included in the output CSS.
10 | //
11 | // Shared Sass variables, which can be used to adjust Ionic's
12 | // default Sass variables, belong in "theme/variables.scss".
13 | //
14 | // To declare rules for a specific mode, create a child rule
15 | // for the .md, .ios, or .wp mode classes. The mode class is
16 | // automatically applied to the
element in the app.
17 |
--------------------------------------------------------------------------------
/src/app/main.ts:
--------------------------------------------------------------------------------
1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
2 |
3 | import { AppModule } from './app.module';
4 |
5 | platformBrowserDynamic().bootstrapModule(AppModule);
6 |
--------------------------------------------------------------------------------
/src/assets/icon/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/didinj/ionic3-angular4-cordova-sqlite-example/dc47f2203b41d71f83c56981bbdd809fb470565e/src/assets/icon/favicon.ico
--------------------------------------------------------------------------------
/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Ionic App
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/src/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Ionic",
3 | "short_name": "Ionic",
4 | "start_url": "index.html",
5 | "display": "standalone",
6 | "icons": [{
7 | "src": "assets/imgs/logo.png",
8 | "sizes": "512x512",
9 | "type": "image/png"
10 | }],
11 | "background_color": "#4e8ef7",
12 | "theme_color": "#4e8ef7"
13 | }
--------------------------------------------------------------------------------
/src/pages/add-data/add-data.html:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 | My Expense
11 |
12 |
13 |
14 |
15 |
16 |
17 | Add Data
18 |
40 |
41 |
--------------------------------------------------------------------------------
/src/pages/add-data/add-data.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { IonicPageModule } from 'ionic-angular';
3 | import { AddDataPage } from './add-data';
4 |
5 | @NgModule({
6 | declarations: [
7 | AddDataPage,
8 | ],
9 | imports: [
10 | IonicPageModule.forChild(AddDataPage),
11 | ],
12 | })
13 | export class AddDataPageModule {}
14 |
--------------------------------------------------------------------------------
/src/pages/add-data/add-data.scss:
--------------------------------------------------------------------------------
1 | page-add-data {
2 |
3 | }
4 |
--------------------------------------------------------------------------------
/src/pages/add-data/add-data.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { IonicPage, NavController, NavParams } from 'ionic-angular';
3 | import { SQLite, SQLiteObject } from '@ionic-native/sqlite';
4 | import { Toast } from '@ionic-native/toast';
5 |
6 | @IonicPage()
7 | @Component({
8 | selector: 'page-add-data',
9 | templateUrl: 'add-data.html',
10 | })
11 | export class AddDataPage {
12 |
13 | data = { date:"", type:"", description:"", amount:0 };
14 |
15 | constructor(public navCtrl: NavController,
16 | public navParams: NavParams,
17 | private sqlite: SQLite,
18 | private toast: Toast) {}
19 |
20 | saveData() {
21 | this.sqlite.create({
22 | name: 'ionicdb.db',
23 | location: 'default'
24 | }).then((db: SQLiteObject) => {
25 | db.executeSql('INSERT INTO expense VALUES(NULL,?,?,?,?)',[this.data.date,this.data.type,this.data.description,this.data.amount])
26 | .then(res => {
27 | console.log(res);
28 | this.toast.show('Data saved', '5000', 'center').subscribe(
29 | toast => {
30 | this.navCtrl.popToRoot();
31 | }
32 | );
33 | })
34 | .catch(e => {
35 | console.log(e);
36 | this.toast.show(e, '5000', 'center').subscribe(
37 | toast => {
38 | console.log(toast);
39 | }
40 | );
41 | });
42 | }).catch(e => {
43 | console.log(e);
44 | this.toast.show(e, '5000', 'center').subscribe(
45 | toast => {
46 | console.log(toast);
47 | }
48 | );
49 | });
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/src/pages/edit-data/edit-data.html:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 | My Expense
11 |
12 |
13 |
14 |
15 |
16 |
17 | Edit Data
18 |
41 |
42 |
--------------------------------------------------------------------------------
/src/pages/edit-data/edit-data.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { IonicPageModule } from 'ionic-angular';
3 | import { EditDataPage } from './edit-data';
4 |
5 | @NgModule({
6 | declarations: [
7 | EditDataPage,
8 | ],
9 | imports: [
10 | IonicPageModule.forChild(EditDataPage),
11 | ],
12 | })
13 | export class EditDataPageModule {}
14 |
--------------------------------------------------------------------------------
/src/pages/edit-data/edit-data.scss:
--------------------------------------------------------------------------------
1 | page-edit-data {
2 |
3 | }
4 |
--------------------------------------------------------------------------------
/src/pages/edit-data/edit-data.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { IonicPage, NavController, NavParams } from 'ionic-angular';
3 | import { SQLite, SQLiteObject } from '@ionic-native/sqlite';
4 | import { Toast } from '@ionic-native/toast';
5 |
6 | @IonicPage()
7 | @Component({
8 | selector: 'page-edit-data',
9 | templateUrl: 'edit-data.html',
10 | })
11 | export class EditDataPage {
12 |
13 | data = { rowid:0, date:"", type:"", description:"", amount:0 };
14 |
15 | constructor(public navCtrl: NavController,
16 | public navParams: NavParams,
17 | private sqlite: SQLite,
18 | private toast: Toast) {
19 | this.getCurrentData(navParams.get("rowid"));
20 | }
21 |
22 | getCurrentData(rowid) {
23 | this.sqlite.create({
24 | name: 'ionicdb.db',
25 | location: 'default'
26 | }).then((db: SQLiteObject) => {
27 | db.executeSql('SELECT * FROM expense WHERE rowid=?', [rowid])
28 | .then(res => {
29 | if(res.rows.length > 0) {
30 | this.data.rowid = res.rows.item(0).rowid;
31 | this.data.date = res.rows.item(0).date;
32 | this.data.type = res.rows.item(0).type;
33 | this.data.description = res.rows.item(0).description;
34 | this.data.amount = res.rows.item(0).amount;
35 | }
36 | })
37 | .catch(e => {
38 | console.log(e);
39 | this.toast.show(e, '5000', 'center').subscribe(
40 | toast => {
41 | console.log(toast);
42 | }
43 | );
44 | });
45 | }).catch(e => {
46 | console.log(e);
47 | this.toast.show(e, '5000', 'center').subscribe(
48 | toast => {
49 | console.log(toast);
50 | }
51 | );
52 | });
53 | }
54 |
55 | updateData() {
56 | this.sqlite.create({
57 | name: 'ionicdb.db',
58 | location: 'default'
59 | }).then((db: SQLiteObject) => {
60 | db.executeSql('UPDATE expense SET date=?,type=?,description=?,amount=? WHERE rowid=?',[this.data.date,this.data.type,this.data.description,this.data.amount,this.data.rowid])
61 | .then(res => {
62 | console.log(res);
63 | this.toast.show('Data updated', '5000', 'center').subscribe(
64 | toast => {
65 | this.navCtrl.popToRoot();
66 | }
67 | );
68 | })
69 | .catch(e => {
70 | console.log(e);
71 | this.toast.show(e, '5000', 'center').subscribe(
72 | toast => {
73 | console.log(toast);
74 | }
75 | );
76 | });
77 | }).catch(e => {
78 | console.log(e);
79 | this.toast.show(e, '5000', 'center').subscribe(
80 | toast => {
81 | console.log(toast);
82 | }
83 | );
84 | });
85 | }
86 |
87 | }
88 |
--------------------------------------------------------------------------------
/src/pages/home/home.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | My Expense
5 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 | Expense List
16 |
17 |
18 |
19 |
20 | {{expense.date}}
21 | Type: {{expense.type}}
22 | {{expense.description}}
23 |
24 |
25 | Amount: ${{expense.amount}}
26 |
27 |
28 |
29 |
32 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | Balance: ${{balance}}
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/pages/home/home.scss:
--------------------------------------------------------------------------------
1 | page-home {
2 |
3 | }
4 |
--------------------------------------------------------------------------------
/src/pages/home/home.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { NavController } from 'ionic-angular';
3 | import { SQLite, SQLiteObject } from '@ionic-native/sqlite';
4 | import { AddDataPage } from '../add-data/add-data';
5 | import { EditDataPage } from '../edit-data/edit-data';
6 |
7 | @Component({
8 | selector: 'page-home',
9 | templateUrl: 'home.html'
10 | })
11 | export class HomePage {
12 |
13 | expenses: any = [];
14 | totalIncome = 0;
15 | totalExpense = 0;
16 | balance = 0;
17 |
18 | constructor(public navCtrl: NavController,
19 | private sqlite: SQLite) {}
20 |
21 | ionViewDidLoad() {
22 | this.getData();
23 | }
24 |
25 | ionViewWillEnter() {
26 | this.getData();
27 | }
28 |
29 | getData() {
30 | this.sqlite.create({
31 | name: 'ionicdb.db',
32 | location: 'default'
33 | }).then((db: SQLiteObject) => {
34 | db.executeSql('CREATE TABLE IF NOT EXISTS expense(rowid INTEGER PRIMARY KEY, date TEXT, type TEXT, description TEXT, amount INT)', {})
35 | .then(res => console.log('Executed SQL'))
36 | .catch(e => console.log(e));
37 | db.executeSql('SELECT * FROM expense ORDER BY rowid DESC', {})
38 | .then(res => {
39 | this.expenses = [];
40 | for(var i=0; i console.log(e));
45 | db.executeSql('SELECT SUM(amount) AS totalIncome FROM expense WHERE type="Income"', {})
46 | .then(res => {
47 | if(res.rows.length>0) {
48 | this.totalIncome = parseInt(res.rows.item(0).totalIncome);
49 | this.balance = this.totalIncome-this.totalExpense;
50 | }
51 | })
52 | .catch(e => console.log(e));
53 | db.executeSql('SELECT SUM(amount) AS totalExpense FROM expense WHERE type="Expense"', {})
54 | .then(res => {
55 | if(res.rows.length>0) {
56 | this.totalExpense = parseInt(res.rows.item(0).totalExpense);
57 | this.balance = this.totalIncome-this.totalExpense;
58 | }
59 | })
60 | }).catch(e => console.log(e));
61 | }
62 |
63 | addData() {
64 | this.navCtrl.push(AddDataPage);
65 | }
66 |
67 | editData(rowid) {
68 | this.navCtrl.push(EditDataPage, {
69 | rowid:rowid
70 | });
71 | }
72 |
73 | deleteData(rowid) {
74 | this.sqlite.create({
75 | name: 'ionicdb.db',
76 | location: 'default'
77 | }).then((db: SQLiteObject) => {
78 | db.executeSql('DELETE FROM expense WHERE rowid=?', [rowid])
79 | .then(res => {
80 | console.log(res);
81 | this.getData();
82 | })
83 | .catch(e => console.log(e));
84 | }).catch(e => console.log(e));
85 | }
86 |
87 | }
88 |
--------------------------------------------------------------------------------
/src/service-worker.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Check out https://googlechrome.github.io/sw-toolbox/ for
3 | * more info on how to use sw-toolbox to custom configure your service worker.
4 | */
5 |
6 |
7 | 'use strict';
8 | importScripts('./build/sw-toolbox.js');
9 |
10 | self.toolbox.options.cache = {
11 | name: 'ionic-cache'
12 | };
13 |
14 | // pre-cache our key assets
15 | self.toolbox.precache(
16 | [
17 | './build/main.js',
18 | './build/vendor.js',
19 | './build/main.css',
20 | './build/polyfills.js',
21 | 'index.html',
22 | 'manifest.json'
23 | ]
24 | );
25 |
26 | // dynamically cache any other local assets
27 | self.toolbox.router.any('/*', self.toolbox.cacheFirst);
28 |
29 | // for any other requests go to the network, cache,
30 | // and then only use that cached resource if your user goes offline
31 | self.toolbox.router.default = self.toolbox.networkFirst;
32 |
--------------------------------------------------------------------------------
/src/theme/variables.scss:
--------------------------------------------------------------------------------
1 | // Ionic Variables and Theming. For more info, please see:
2 | // http://ionicframework.com/docs/theming/
3 |
4 | // Font path is used to include ionicons,
5 | // roboto, and noto sans fonts
6 | $font-path: "../assets/fonts";
7 |
8 |
9 | // The app direction is used to include
10 | // rtl styles in your app. For more info, please see:
11 | // http://ionicframework.com/docs/theming/rtl-support/
12 | $app-direction: ltr;
13 |
14 |
15 | @import "ionic.globals";
16 |
17 |
18 | // Shared Variables
19 | // --------------------------------------------------
20 | // To customize the look and feel of this app, you can override
21 | // the Sass variables found in Ionic's source scss files.
22 | // To view all the possible Ionic variables, see:
23 | // http://ionicframework.com/docs/theming/overriding-ionic-variables/
24 |
25 |
26 |
27 |
28 | // Named Color Variables
29 | // --------------------------------------------------
30 | // Named colors makes it easy to reuse colors on various components.
31 | // It's highly recommended to change the default colors
32 | // to match your app's branding. Ionic uses a Sass map of
33 | // colors so you can add, rename and remove colors as needed.
34 | // The "primary" color is the only required color in the map.
35 |
36 | $colors: (
37 | primary: #488aff,
38 | secondary: #32db64,
39 | danger: #f53d3d,
40 | light: #f4f4f4,
41 | dark: #222
42 | );
43 |
44 |
45 | // App iOS Variables
46 | // --------------------------------------------------
47 | // iOS only Sass variables can go here
48 |
49 |
50 |
51 |
52 | // App Material Design Variables
53 | // --------------------------------------------------
54 | // Material Design only Sass variables can go here
55 |
56 |
57 |
58 |
59 | // App Windows Variables
60 | // --------------------------------------------------
61 | // Windows only Sass variables can go here
62 |
63 |
64 |
65 |
66 | // App Theme
67 | // --------------------------------------------------
68 | // Ionic apps can have different themes applied, which can
69 | // then be future customized. This import comes last
70 | // so that the above variables are used and Ionic's
71 | // default are overridden.
72 |
73 | @import "ionic.theme.default";
74 |
75 |
76 | // Ionicons
77 | // --------------------------------------------------
78 | // The premium icon font for Ionic. For more info, please see:
79 | // http://ionicframework.com/docs/ionicons/
80 |
81 | @import "ionic.ionicons";
82 |
83 |
84 | // Fonts
85 | // --------------------------------------------------
86 |
87 | @import "roboto";
88 | @import "noto-sans";
89 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "allowSyntheticDefaultImports": true,
4 | "declaration": false,
5 | "emitDecoratorMetadata": true,
6 | "experimentalDecorators": true,
7 | "lib": [
8 | "dom",
9 | "es2015"
10 | ],
11 | "module": "es2015",
12 | "moduleResolution": "node",
13 | "sourceMap": true,
14 | "target": "es5"
15 | },
16 | "include": [
17 | "src/**/*.ts"
18 | ],
19 | "exclude": [
20 | "node_modules"
21 | ],
22 | "compileOnSave": false,
23 | "atom": {
24 | "rewriteTsconfig": false
25 | }
26 | }
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "rules": {
3 | "no-duplicate-variable": true,
4 | "no-unused-variable": [
5 | true
6 | ]
7 | },
8 | "rulesDirectory": [
9 | "node_modules/tslint-eslint-rules/dist/rules"
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------