♻️ Rewrote all DB structure
This commit is contained in:
@@ -15,9 +15,8 @@ const firebaseConfig = {
|
|||||||
};
|
};
|
||||||
firebase.initializeApp(firebaseConfig);
|
firebase.initializeApp(firebaseConfig);
|
||||||
|
|
||||||
// a reference to the Feeds collection
|
// a reference to the users collection
|
||||||
const feedsCollection = firebase.firestore().collection("feeds");
|
const usersCollection = firebase.firestore().collection("users");
|
||||||
const settingsCollection = firebase.firestore().collection("settings");
|
|
||||||
|
|
||||||
// the shared state object that any vue component
|
// the shared state object that any vue component
|
||||||
// can get access to
|
// can get access to
|
||||||
@@ -35,13 +34,18 @@ export const fb = {
|
|||||||
label
|
label
|
||||||
};
|
};
|
||||||
try {
|
try {
|
||||||
return feedsCollection.add(dt);
|
return usersCollection
|
||||||
|
.doc(fb.currentUser.uid)
|
||||||
|
.collection("feeds")
|
||||||
|
.add(dt);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return console.error("error inserting", dt, e);
|
return console.error("error inserting", dt, e);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
deleteFeed: id => {
|
deleteFeed: id => {
|
||||||
feedsCollection
|
usersCollection
|
||||||
|
.doc(fb.currentUser.uid)
|
||||||
|
.collection("feeds")
|
||||||
.doc(id)
|
.doc(id)
|
||||||
.delete()
|
.delete()
|
||||||
.catch(e => console.error("error deleting", dt, e));
|
.catch(e => console.error("error deleting", dt, e));
|
||||||
@@ -56,44 +60,63 @@ export const fb = {
|
|||||||
value
|
value
|
||||||
};
|
};
|
||||||
try {
|
try {
|
||||||
return settingsCollection.doc(setting).set(st);
|
return usersCollection
|
||||||
|
.doc(fb.currentUser.uid)
|
||||||
|
.collection("settings")
|
||||||
|
.doc(setting).set(st);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return console.error("error updating", st, e);
|
return console.error("error updating", st, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// onSnapshot is executed every time the data
|
|
||||||
// in the underlying firestore collection changes
|
|
||||||
// It will get passed an array of references to
|
|
||||||
// the documents that match your query
|
|
||||||
feedsCollection
|
|
||||||
.orderBy("createdOn", "desc")
|
|
||||||
// .limit(0)
|
|
||||||
.onSnapshot(feedsRef => {
|
|
||||||
const feeds = [];
|
|
||||||
feedsRef.forEach(doc => {
|
|
||||||
const feed = doc.data();
|
|
||||||
feed.id = doc.id;
|
|
||||||
feeds.push(feed);
|
|
||||||
});
|
|
||||||
fb.feedsInFeed = feeds;
|
|
||||||
});
|
|
||||||
|
|
||||||
settingsCollection
|
|
||||||
// .orderBy("updatedOn", "desc")
|
|
||||||
// .limit(2)
|
|
||||||
.onSnapshot(settingsRef => {
|
|
||||||
const settings = [];
|
|
||||||
settingsRef.forEach(doc => {
|
|
||||||
const setting = doc.data();
|
|
||||||
setting.id = doc.id;
|
|
||||||
settings.push(setting);
|
|
||||||
});
|
|
||||||
fb.currentSettings = settings;
|
|
||||||
});
|
|
||||||
|
|
||||||
// When a user logs in or out, save that in the store
|
// When a user logs in or out, save that in the store
|
||||||
firebase.auth().onAuthStateChanged(user => {
|
firebase.auth().onAuthStateChanged(user => {
|
||||||
fb.currentUser = user;
|
if (user) {
|
||||||
|
fb.currentUser = user;
|
||||||
|
fb.currentUser.providerData.forEach(profile => {
|
||||||
|
let us = {
|
||||||
|
updatedOn: new Date(),
|
||||||
|
provider: profile.providerId,
|
||||||
|
name: profile.displayName,
|
||||||
|
email: profile.email,
|
||||||
|
photoUrl: profile.photoURL,
|
||||||
|
uid: profile.uid
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
usersCollection.doc(fb.currentUser.uid).set(us);
|
||||||
|
} catch (e) {
|
||||||
|
console.error("error updating", us, e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
usersCollection
|
||||||
|
.doc(fb.currentUser.uid)
|
||||||
|
.collection("feeds")
|
||||||
|
.orderBy("createdOn", "desc")
|
||||||
|
.onSnapshot(feedsRef => {
|
||||||
|
const feeds = [];
|
||||||
|
feedsRef.forEach(doc => {
|
||||||
|
const feed = doc.data();
|
||||||
|
feed.id = doc.id;
|
||||||
|
feeds.push(feed);
|
||||||
|
});
|
||||||
|
fb.feedsInFeed = feeds;
|
||||||
|
});
|
||||||
|
|
||||||
|
usersCollection
|
||||||
|
.doc(fb.currentUser.uid)
|
||||||
|
.collection("settings")
|
||||||
|
.onSnapshot(settingsRef => {
|
||||||
|
const settings = [];
|
||||||
|
settingsRef.forEach(doc => {
|
||||||
|
const setting = doc.data();
|
||||||
|
setting.id = doc.id;
|
||||||
|
settings.push(setting);
|
||||||
|
});
|
||||||
|
fb.currentSettings = settings;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
fb.currentUser = null;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,40 +3,6 @@
|
|||||||
<pw-section class="green" :label="$t('account')" ref="account">
|
<pw-section class="green" :label="$t('account')" ref="account">
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<div v-if="!fb.currentUser">
|
|
||||||
<label>{{ $t("login_with") }}</label>
|
|
||||||
<p>
|
|
||||||
<button class="icon" @click="signInWithGoogle">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
class="material-icons"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
d="M12.24 10.285V14.4h6.806c-.275 1.765-2.056 5.174-6.806 5.174-4.095 0-7.439-3.389-7.439-7.574s3.345-7.574 7.439-7.574c2.33 0 3.891.989 4.785 1.849l3.254-3.138C18.189 1.186 15.479 0 12.24 0c-6.635 0-12 5.365-12 12s5.365 12 12 12c6.926 0 11.52-4.869 11.52-11.726 0-.788-.085-1.39-.189-1.989H12.24z"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
<span>Google</span>
|
|
||||||
</button>
|
|
||||||
<br />
|
|
||||||
<button class="icon" @click="signInWithGithub">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
class="material-icons"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
<span>GitHub</span>
|
|
||||||
</button>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div v-if="fb.currentUser">
|
<div v-if="fb.currentUser">
|
||||||
<button class="icon">
|
<button class="icon">
|
||||||
<img
|
<img
|
||||||
@@ -73,12 +39,46 @@
|
|||||||
</pw-toggle>
|
</pw-toggle>
|
||||||
</p>
|
</p>
|
||||||
<p v-if="fb.currentSettings.length == 0">
|
<p v-if="fb.currentSettings.length == 0">
|
||||||
<button class="" @click="initSettings">
|
<button class="" @click="writeSettings">
|
||||||
<i class="material-icons">sync</i>
|
<i class="material-icons">sync</i>
|
||||||
<span>{{ $t("turn_on") + " " + $t("sync") }}</span>
|
<span>{{ $t("turn_on") + " " + $t("sync") }}</span>
|
||||||
</button>
|
</button>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<label>{{ $t("login_with") }}</label>
|
||||||
|
<p>
|
||||||
|
<button class="icon" @click="signInWithGoogle">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
class="material-icons"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M12.24 10.285V14.4h6.806c-.275 1.765-2.056 5.174-6.806 5.174-4.095 0-7.439-3.389-7.439-7.574s3.345-7.574 7.439-7.574c2.33 0 3.891.989 4.785 1.849l3.254-3.138C18.189 1.186 15.479 0 12.24 0c-6.635 0-12 5.365-12 12s5.365 12 12 12c6.926 0 11.52-4.869 11.52-11.726 0-.788-.085-1.39-.189-1.989H12.24z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<span>Google</span>
|
||||||
|
</button>
|
||||||
|
<br />
|
||||||
|
<button class="icon" @click="signInWithGithub">
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
class="material-icons"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<span>GitHub</span>
|
||||||
|
</button>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</pw-section>
|
</pw-section>
|
||||||
@@ -452,7 +452,7 @@ export default {
|
|||||||
toggleSettings(s, v) {
|
toggleSettings(s, v) {
|
||||||
fb.writeSettings(s, !v);
|
fb.writeSettings(s, !v);
|
||||||
},
|
},
|
||||||
initSettings() {
|
writeSettings() {
|
||||||
fb.writeSettings("syncHistory", false);
|
fb.writeSettings("syncHistory", false);
|
||||||
fb.writeSettings("syncCollections", true);
|
fb.writeSettings("syncCollections", true);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user