├── index.js.html ├── Code.gs ├── index.html ├── Navbar.js.html ├── Store.js.html ├── App.js.html ├── head.html ├── Sidenav.js.html ├── utils.gs ├── Scorecard.js.html └── SkeletonLoaders.js.html /index.js.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /Code.gs: -------------------------------------------------------------------------------- 1 | function doGet() { 2 | const html = HtmlService.createTemplateFromFile('index'); 3 | return html.evaluate().addMetaTag('viewport', 'width=device-width, initial-scale=1').setTitle('Web App').setFaviconUrl('https://img.icons8.com/windows/452/mandalorian.png') ; 4 | } 5 | 6 | function require(filename) { 7 | return HtmlService.createHtmlOutputFromFile(filename).getContent(); 8 | } 9 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | != require('head')?> 5 | != require('Store.js')?> 6 | != require('SkeletonLoaders.js')?> 7 | != require('Scorecard.js')?> 8 | != require('Sidenav.js')?> 9 | != require('Navbar.js')?> 10 | != require('App.js')?> 11 | != require('index.js')?> 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Navbar.js.html: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /Store.js.html: -------------------------------------------------------------------------------- 1 | 32 | -------------------------------------------------------------------------------- /App.js.html: -------------------------------------------------------------------------------- 1 | 36 | -------------------------------------------------------------------------------- /head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Sidenav.js.html: -------------------------------------------------------------------------------- 1 | 35 | -------------------------------------------------------------------------------- /utils.gs: -------------------------------------------------------------------------------- 1 | /************************************************** 2 | * Spreadsheet DB 3 | **************************************************/ 4 | 5 | const spreadsheetID = 'YOUR SPREADSHEET ID; 6 | const ss = SpreadsheetApp.openById( spreadsheetID ); 7 | const sheet = ss.getSheets()[0]; 8 | 9 | /************************************************** 10 | * Database Methods 11 | **************************************************/ 12 | 13 | const getData = () => { 14 | const data = sheet.getDataRange().getValues(); 15 | const fields = data.shift(); 16 | return data.flatMap(row => row.map( (col,i) => ({ [fields[i]] : col}) ).reduce((old,current) => ( {...old, ...current} ), {})); 17 | }; 18 | 19 | const getUserByField = (field,value) => { 20 | return getData().find(e => e[field] == value); 21 | }; 22 | 23 | const getUserInfo = () => { 24 | const userEmail = Session.getActiveUser().getEmail(); 25 | return getUserByField('email', userEmail); 26 | } 27 | 28 | /************************************************** 29 | * TESTS 30 | **************************************************/ 31 | 32 | const __test__getData = () => { 33 | console.log( getData()); 34 | } 35 | 36 | const __test__getUserByField = () => { 37 | console.log( getUserByField('id', 600)); 38 | } 39 | 40 | const __test__getUserInfo = () => { 41 | console.log( getUserInfo() ); 42 | } 43 | 44 | /***************************************************/ 45 | -------------------------------------------------------------------------------- /Scorecard.js.html: -------------------------------------------------------------------------------- 1 | 48 | -------------------------------------------------------------------------------- /SkeletonLoaders.js.html: -------------------------------------------------------------------------------- 1 | 41 | --------------------------------------------------------------------------------