refactord, tidied up, added icon for storage and a new node for writing buffers to storage files

This commit is contained in:
Peter Svensson
2019-07-02 20:43:04 +02:00
parent ae90a7c225
commit df5b5c8e82
26 changed files with 120 additions and 16 deletions

View File

@ -0,0 +1,50 @@
<script type="text/javascript">
RED.nodes.registerType('firestore-add',{
category: 'firebase-admin',
color: '#a6bbcf',
defaults: {
name: {value:""},
cred: {value: "", type: 'firebase-config'}
},
inputs:1,
outputs:1,
icon: "firebase-admin-icon.png",
label: function() {
return this.name||"firestore-add";
},
oneditsave: function() {
let type = $('#apitype-select').val()
console.log('type is set to '+type)
},
oneditprepare: function() {
$('#apitype-select').change(function () {
$("#node-input-apitype").val($(this).find('option:selected').val())
});
$("#apitype-select").val($("#node-input-apitype").val())
$('#apitype-select').trigger('change');
}
});
</script>
<script type="text/x-red" data-template-name="firestore-add">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
<div class="form-row">
<label for="node-input-cred"><i class="icon-tag"></i> Credentials</label>
<input type="text" id="node-input-cred" placeholder="Name">
</div>
</script>
<script type="text/x-red" data-help-name="firestore-add">
<p>A node that wraps the firestore-add SDK</p>
</script>

View File

@ -0,0 +1,31 @@
module.exports = function(RED) {
function FirebaseAdmin(config) {
RED.nodes.createNode(this, config);
var node = this;
if(config.cred){
let c = RED.nodes.getNode(config.cred)
this.admin = c.admin
}
node.on('input', function(msg) {
if(msg && msg.payload){
console.log('firestore-add got input')
console.dir(msg)
const path = msg.payload.path
const obj = msg.payload.obj
console.log('storing '+obj+' at rtdb path '+path)
this.admin.firestore().collection(path).add(obj).then((res)=>{
console.log('firestore set result '+res.id)
console.dir(res)
node.send({payload:res.id})
})
}
}.bind(this));
}
RED.nodes.registerType("firestore-add", FirebaseAdmin);
}

View File

@ -0,0 +1,50 @@
<script type="text/javascript">
RED.nodes.registerType('firestore-get',{
category: 'firebase-admin',
color: '#a6bbcf',
defaults: {
name: {value:""},
cred: {value: "", type: 'firebase-config'}
},
inputs:1,
outputs:1,
icon: "firebase-admin-icon.png",
label: function() {
return this.name||"firestore-get";
},
oneditsave: function() {
let type = $('#apitype-select').val()
console.log('type is set to '+type)
},
oneditprepare: function() {
$('#apitype-select').change(function () {
$("#node-input-apitype").val($(this).find('option:selected').val())
});
$("#apitype-select").val($("#node-input-apitype").val())
$('#apitype-select').trigger('change');
}
});
</script>
<script type="text/x-red" data-template-name="firestore-get">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
<div class="form-row">
<label for="node-input-cred"><i class="icon-tag"></i> Credentials</label>
<input type="text" id="node-input-cred" placeholder="Name">
</div>
</script>
<script type="text/x-red" data-help-name="firestore-get">
<p>A node that wraps the firestore-get SDK</p>
</script>

View File

@ -0,0 +1,37 @@
let unsub
module.exports = function(RED) {
function FirebaseAdmin(config) {
RED.nodes.createNode(this, config);
var node = this;
if(config.cred){
let c = RED.nodes.getNode(config.cred)
this.admin = c.admin
}
const cb = (res)=>{
console.log('firestore get result '+res)
console.dir(res)
let val = res.data()
console.log('val='+val)
node.send({payload:val})
}
node.on('input', function(msg) {
if(msg && msg.payload){
const path = msg.payload.path
if(unsub){
unsub()
}
this.admin.firestore().doc(path).onSnapshot(cb)
}
}.bind(this));
}
RED.nodes.registerType("firestore-get", FirebaseAdmin);
}

View File

@ -0,0 +1,50 @@
<script type="text/javascript">
RED.nodes.registerType('firestore-query',{
category: 'firebase-admin',
color: '#a6bbcf',
defaults: {
name: {value:""},
cred: {value: "", type: 'firebase-config'}
},
inputs:1,
outputs:1,
icon: "firebase-admin-icon.png",
label: function() {
return this.name||"firestore-query";
},
oneditsave: function() {
let type = $('#apitype-select').val()
console.log('type is set to '+type)
},
oneditprepare: function() {
$('#apitype-select').change(function () {
$("#node-input-apitype").val($(this).find('option:selected').val())
});
$("#apitype-select").val($("#node-input-apitype").val())
$('#apitype-select').trigger('change');
}
});
</script>
<script type="text/x-red" data-template-name="firestore-query">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
<div class="form-row">
<label for="node-input-cred"><i class="icon-tag"></i> Credentials</label>
<input type="text" id="node-input-cred" placeholder="Name">
</div>
</script>
<script type="text/x-red" data-help-name="firestore-query">
<p>A node that wraps the firestore-query SDK</p>
</script>

View File

@ -0,0 +1,70 @@
let unsub
module.exports = function(RED) {
function FirebaseAdmin(config) {
RED.nodes.createNode(this, config);
var node = this;
if(config.cred){
let c = RED.nodes.getNode(config.cred)
this.admin = c.admin
}
const cb = (res)=>{
console.log('firestore query result '+res)
console.dir(res)
let val = res.docs.map((d)=>{return d.data()})
console.log('val='+val)
node.send({payload:val})
}
node.on('input', function(msg) {
console.log('firestore-query got input')
console.dir(msg.payload)
if(msg && msg.payload){
const path = msg.payload.path
if(unsub){
unsub()
}
let ref = this.admin.firestore().collection(path)
let dir = msg.payload.orderDirection ? msg.payload.orderDirection : 'desc'
if(msg.payload.orderBy){
console.log('orderBy dir = '+dir)
ref = ref.orderBy(msg.payload.orderBy, dir)
}
if(msg.payload.limit){
ref = ref.limit(msg.payload.limit)
}
if(msg.payload.startAt){
console.log('startAt '+msg.payload.startAt)
ref = ref.startAt(msg.payload.startAt)
}
if(msg.payload.endAt){
console.log('endAt '+msg.payload.endAt)
ref = ref.endAt(msg.payload.endAt)
}
// Decorate with queries
if(msg.payload.queries && msg.payload.queries.length > 0){
console.log('found queries')
msg.payload.queries.forEach((query)=>{
console.dir(query)
ref = ref.where(query[0], query[1], query[2])
})
}
console.log('finished firetore query is')
console.dir(ref)
unsub = ref.onSnapshot(cb)
}
}.bind(this));
}
RED.nodes.registerType("firestore-query", FirebaseAdmin);
}

View File

@ -0,0 +1,50 @@
<script type="text/javascript">
RED.nodes.registerType('firestore-set',{
category: 'firebase-admin',
color: '#a6bbcf',
defaults: {
name: {value:""},
cred: {value: "", type: 'firebase-config'}
},
inputs:1,
outputs:0,
icon: "firebase-admin-icon.png",
label: function() {
return this.name||"firestore-set";
},
oneditsave: function() {
let type = $('#apitype-select').val()
console.log('type is set to '+type)
},
oneditprepare: function() {
$('#apitype-select').change(function () {
$("#node-input-apitype").val($(this).find('option:selected').val())
});
$("#apitype-select").val($("#node-input-apitype").val())
$('#apitype-select').trigger('change');
}
});
</script>
<script type="text/x-red" data-template-name="firestore-set">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
<div class="form-row">
<label for="node-input-cred"><i class="icon-tag"></i> Credentials</label>
<input type="text" id="node-input-cred" placeholder="Name">
</div>
</script>
<script type="text/x-red" data-help-name="firestore-set">
<p>A node that wraps the firestore-set SDK</p>
</script>

View File

@ -0,0 +1,30 @@
module.exports = function(RED) {
function FirebaseAdmin(config) {
RED.nodes.createNode(this, config);
var node = this;
if(config.cred){
let c = RED.nodes.getNode(config.cred)
this.admin = c.admin
}
node.on('input', function(msg) {
if(msg && msg.payload){
console.log('firestore-set got input')
console.dir(msg)
const path = msg.payload.path
const obj = msg.payload.obj
console.log('storing '+obj+' at firestore path '+path)
this.admin.firestore().doc(path).set(obj).then((res)=>{
console.log('firestore set result '+res)
console.dir(res)
})
}
}.bind(this));
}
RED.nodes.registerType("firestore-set", FirebaseAdmin);
}