Hi mirkonasato,
I am trying to implement ionix-sqlite, I run npm install --save ionix-sqlite
, and implement the code, which builds with no errors. However, when I try start up the app, I get the following error:
Uncaught SyntaxError: <unknown message reserved_word> app.bundle.js:120054
deviceready has not fired after 5 seconds. cordova.js:1185
Channel not fired: onDOMContentLoaded
compiled code ( app.bundle.js
):
120052 /* 729 */
120053 /***/ function(module, exports) {
120054 export { SqlDatabase } from './SqlDatabase';
120055 /***/ },
Do you have any ideas what I have done wrong? Is it complaining about the reserved word “export
”?
Here is my implementation:
app.ts
initializeApp() {
this.platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.
StatusBar.styleDefault();
if (window.cordova) {
this.chatsStorageService.createDatabase();
}
});
}
chatsStorageService.ts
import { Injectable } from "@angular/core";
import { SQLite } from 'ionic-native';
import { Chat, Message } from 'api/models';
import { Messages } from 'api/collections';
import { SqlDatabase } from 'ionix-sqlite';
//import { Item } from './item.model';
@Injectable()
export class ChatsStorageService {
private database = null;
private name: string = 'data.db.thewhozoo';
public chats: Array<Chat> = new Array<Chat>();
public messages: Array<Message> = new Array<Message>();
private dbPromise: Promise<SqlDatabase>;
constructor() {
}
public createDatabase(): void {
const createChatsTable: string = "CREATE TABLE IF NOT EXISTS chats (_id TEXT PRIMARY KEY, memberIds TEXT, title TEXT, subTitle TEXT, picture TEXT, lastMessageId TEXT, lastMessageCreatedAt DATE)";
const createMessagesTable: string = "CREATE TABLE IF NOT EXISTS messages (_id TEXT PRIMARY KEY, chatId TEXT, senderId TEXT, ownership TEXT, content TEXT, createdAt DATE, changeDate BOOLEAN, readByReceiver BOOLEAN)";
this.dbPromise = SqlDatabase.open(this.databaseName, [createChatsTable]);
this.dbPromise.then((data) => {
return this.dbPromise
.then((db) => db.execute(createMessagesTable))
.then((resultSet) => {
console.log('database ' + this.databaseName + ' created');
});
});
}
public refreshChats(): Promise<any> {
const statement: string = "SELECT * FROM chats";
return this.dbPromise
.then((db) => db.execute(statement))
.then((resultSet) => {
this.chats = [];
if (resultSet.rows.length > 0) {
for (var i = 0; i < resultSet.rows.length; i++) {
this.populateChat(resultSet.rows.item(i));
}
}
});
}
private populateChat(chatItem: any): Promise<any> {
const statement: string = "SELECT * FROM messages where _id = ?";
const params: string[] = [chatItem.lastMessageId];
let messages: Array<Message> = new Array<Message>();
return this.dbPromise
.then((db) => db.execute(statement, params))
.then((messageData) => {
this.chats = [];
if (messageData.rows.length > 0) {
for (var j = 0; j < messageData.rows.length; j++) {
if (messageData.rows.item(j)) {
let messageValue: Message = { _id: messageData.rows.item(j)._id, chatId: messageData.rows.item(j).chatId, senderId: messageData.rows.item(j).senderId, ownership: messageData.rows.item(j).ownership, content: messageData.rows.item(j).content, createdAt: messageData.rows.item(j).createdAt, changeDate: messageData.rows.item(j).changeDate, readByReceiver: messageData.rows.item(j).readByReceiver };
messages.push(messageValue);
}
}
}
let chatValue: Chat = {
_id: chatItem._id, memberIds: chatItem.memberIds, title: chatItem.title, subTitle: chatItem.subTitle,
picture: chatItem.picture, lastMessage: messages[0], lastMessageCreatedAt: chatItem.lastMessageCreatedAt
};
if (this.chats.indexOf(chatValue) === -1) {
this.chats.push(chatValue);
}
});
}
public refreshMessages(): Promise<any> {
const statement: string = "SELECT * FROM messages";
return this.dbPromise
.then((db) => db.execute(statement))
.then((resultSet) => {
this.messages = [];
if (resultSet.rows.length > 0) {
for (var i = 0; i < resultSet.rows.length; i++) {
if (resultSet.rows.item(i)) {
this.messages.push({ _id: resultSet.rows.item(i)._id, chatId: resultSet.rows.item(i).chatId, senderId: resultSet.rows.item(i).senderId, ownership: resultSet.rows.item(i).ownership, content: resultSet.rows.item(i).content, createdAt: resultSet.rows.item(i).createdAt, changeDate: resultSet.rows.item(i).changeDate, readByReceiver: resultSet.rows.item(i).readByReceiver });
}
}
}
});
}
public addChat(chat: Chat): Promise<any> {
if (window.cordova) {
if (this.chats.indexOf(chat) < 0) {
const statement: string = "INSERT INTO chats (_id, memberIds, title, subTitle, picture, lastMessageId, lastMessageCreatedAt) VALUES (?, ?, ?, ?, ?, ?, ?)";
const params: any[] = [chat._id, chat.memberIds, chat.title, chat.subTitle, chat.picture, chat.lastMessage._id, chat.lastMessageCreatedAt];
this.chats.push(chat);
return this.dbPromise
.then((db) => db.execute(statement, params))
.then((resultSet) => {
console.log('added chat: ', resultSet);
});
}
}
}
public updateChat(chat: Chat): Promise<any> {
if (window.cordova) {
let idx: number = this.contains(this.chats, chat);
if (idx >= 0) {
this.chats[idx] = chat;
const statement: string = "UPDATE chats SET memberIds = ?, title = ?, subTitle = ?, picture = ?, lastMessageId = ?, lastMessageCreatedAt = ? WHERE _id = ?"
const params: any[] = [chat.memberIds, chat.title, chat.subTitle, chat.picture, chat.lastMessage._id, chat.lastMessageCreatedAt, chat._id];
return this.dbPromise
.then((db) => db.execute(statement, params))
.then((resultSet) => {
console.log('updated chat: ', resultSet);
});
}
}
}
public updateMessage(message: Message): Promise<any> {
if (window.cordova) {
let idx: number = this.contains(this.messages, message);
if (idx >= 0) {
this.messages[idx] = message;
const statement: string = "UPDATE messages SET readByReceiver = ? WHERE _id = ?";
const params: any[] = [message.readByReceiver, message._id];
return this.dbPromise
.then((db) => db.execute(statement, params))
.then((resultSet) => {
console.log('updated message: ', resultSet);
});
}
}
}
private contains(arr: Array<any>, obje: any): number {
for (let i: number = 0; i < arr.length; i++) {
if (arr[i]._id === obje._id) {
return i;
}
}
return -1;
}
public removeChat(chat: Chat): Promise<any> {
if (window.cordova) {
let idx: number = this.chats.indexOf(chat);
if (idx >= 0) {
const selectStatement: string = "SELECT * FROM chats where _id = ?";
const selectParams: string[] = [chat._id];
const deleteStatement: string = "DELETE FROM chats where _id = ?";
const deleteParams: string[] = [chat._id];
for (let i: number = 0; i < this.messages.length; i++) {
if (this.messages[i].chatId === chat._id) {
this.removeMessage(this.messages[i]);
}
}
this.chats.splice(idx, 1);
return this.dbPromise
.then((db) => db.execute(selectStatement, selectParams))
.then((resultSet) => {
if (resultSet && resultSet.rows.length > 0) {
return this.dbPromise
.then((db) => db.execute(deleteStatement, deleteParams))
.then((resultSet) => {
console.log('chat deleted: ', resultSet);
});
}
});
}
}
}
public addMessage(chat: Chat, message: Message): Promise<Message> {
let promise: Promise<Message> = new Promise<Message>(resolve => {
if (window.cordova) {
const statement: string = "SELECT * FROM chats where _id = ?";
const params: string[] = [chat._id];
return this.dbPromise
.then((db) => db.execute(statement, params))
.then((resultSet) => {
if (!resultSet || resultSet.rows.length === 0) {
this.addChat(chat);
}
if (this.messages.indexOf(message) < 0) {
this.addTheMessage(message);
}
});
}
});
return promise;
}
private addTheMessage(message: Message): Promise<any> {
const selectStatement: string = "SELECT * FROM messages where _id = ?";
const selectParams: string[] = [message._id];
const insertStatement: string = "INSERT INTO messages (_id, chatId, senderId, ownership, content, createdAt, changeDate, readByReceiver) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
const insterParams: any[] = [message._id, message.chatId, message.senderId, message.ownership, message.content, message.createdAt, message.changeDate, message.readByReceiver];
return this.dbPromise
.then((db) => db.execute(selectStatement, selectParams))
.then((resultSet) => {
if (!resultSet || resultSet.rows.length === 0) {
return this.dbPromise
.then((db) => db.execute(insertStatement, insterParams))
.then((resultSet) => {
if (!resultSet || resultSet.rows.length === 0) {
let length: number = this.messages.push(message);
console.log('message inserted: ' + length, message);
}
});
}
});
}
public removeMessage(message: Message): Promise<any> {
if (window.cordova) {
let idx: number = this.messages.indexOf(message);
if (idx >= 0) {
const selectStatement: string = "SELECT * FROM messages where _id = ?";
const selectParams: string[] = [message._id];
const deleteStatement: string = "DELETE FROM messages where _id = ?";
const deleteParams: string[] = [message._id];
this.messages.splice(idx, 1);
return this.dbPromise
.then((db) => db.execute(selectStatement, selectParams))
.then((resultSet) => {
if (resultSet && resultSet.rows.length > 0) {
return this.dbPromise
.then((db) => db.execute(deleteStatement, deleteParams))
.then((resultSet) => {
console.log('message deleted: ', message);
});
}
});
}
}
}
public findLastMessageForChat(chat: Chat): Promise<Message> {
let promise: Promise<Message> = new Promise<Message>(resolve => {
const statement: string = "SELECT * FROM messages where chatId = ? order by createdAt desc";
const params: string[] = [chat._id];
return this.dbPromise
.then((db) => db.execute(statement, params))
.then((data) => {
let message: Message = null;
if (data.rows.length > 0) {
for (var i = 0; i < data.rows.length; i++) {
if (data.rows.item(i)) {
message = ({ _id: data.rows.item(i)._id, chatId: data.rows.item(i).chatId, senderId: data.rows.item(i).senderId, ownership: data.rows.item(i).ownership, content: data.rows.item(i).content, createdAt: data.rows.item(i).createdAt, changeDate: data.rows.item(i).changeDate, readByReceiver: data.rows.item(i).readByReceiver });
break;
}
}
}
resolve(message);
});
});
return promise;
}
}
Note: I also commented out the following import:
//import { Item } from './item.model';
because it cases the following build error:
ERROR in ./app/pages/chats/chatsStorageService.ts
(6,22): error TS2307: Cannot find module './item.model'.