refactord, tidied up, added icon for storage and a new node for writing buffers to storage files
This commit is contained in:
50
firestore/firestore-add.html
Normal file
50
firestore/firestore-add.html
Normal 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>
|
||||
31
firestore/firestore-add.js
Normal file
31
firestore/firestore-add.js
Normal 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);
|
||||
}
|
||||
50
firestore/firestore-get.html
Normal file
50
firestore/firestore-get.html
Normal 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>
|
||||
37
firestore/firestore-get.js
Normal file
37
firestore/firestore-get.js
Normal 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);
|
||||
}
|
||||
50
firestore/firestore-query.html
Normal file
50
firestore/firestore-query.html
Normal 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>
|
||||
70
firestore/firestore-query.js
Normal file
70
firestore/firestore-query.js
Normal 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);
|
||||
}
|
||||
50
firestore/firestore-set.html
Normal file
50
firestore/firestore-set.html
Normal 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>
|
||||
30
firestore/firestore-set.js
Normal file
30
firestore/firestore-set.js
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user