From b65d0e2a66c9f4587f1dbe26386b511b5cae4223 Mon Sep 17 00:00:00 2001 From: Anoop M D Date: Thu, 10 Mar 2022 09:01:05 +0530 Subject: [PATCH] feat: save collection to indexedDB --- renderer/components/Sidebar/TitleBar/index.js | 59 +++++++++++++++---- renderer/providers/Store/idb.js | 2 +- renderer/providers/Store/reducer.js | 2 - renderer/providers/Store/useIdb.js | 2 +- 4 files changed, 50 insertions(+), 15 deletions(-) diff --git a/renderer/components/Sidebar/TitleBar/index.js b/renderer/components/Sidebar/TitleBar/index.js index a99ace9ab..e3351fbb3 100644 --- a/renderer/components/Sidebar/TitleBar/index.js +++ b/renderer/components/Sidebar/TitleBar/index.js @@ -1,11 +1,17 @@ import React, { useState, forwardRef, useRef } from 'react'; -import Dropdown from '../../Dropdown'; -import CreateCollection from '../CreateCollection'; +import {nanoid} from 'nanoid'; +import Toast from 'components/Toast'; +import Dropdown from 'components/Dropdown'; +import { saveCollectionToIdb } from 'providers/Store/idb'; +import { useStore } from 'providers/Store'; import { IconDots } from '@tabler/icons'; +import CreateCollection from '../CreateCollection'; import StyledWrapper from './StyledWrapper'; -const Navbar = ({dispatch, actions}) => { +const TitleBar = ({dispatch, actions}) => { const [modalOpen, setModalOpen] = useState(false); + const [store, storeDispatch] = useStore(); + const [showToast, setShowToast] = useState({show: false}); const menuDropdownTippyRef = useRef(); const onMenuDropdownCreate = (ref) => menuDropdownTippyRef.current = ref; @@ -17,20 +23,51 @@ const Navbar = ({dispatch, actions}) => { ); }); - const handleCancel = () => { - setModalOpen(false); - }; + const handleCancel = () => setModalOpen(false); + const handleCloseToast = () => setShowToast({show: false}); const handleConfirm = (values) => { - dispatch({ - name: values.collectionName, - type: actions.COLLECTION_CREATE - }); + // dispatch({ + // name: values.collectionName, + // type: actions.COLLECTION_CREATE + // }); setModalOpen(false); + console.log(store.idbConnection); + if(!store.idbConnection) { + setShowToast({ + show: true, + type: 'error', + text: 'IndexedDB Error: idb connection is null' + }); + return; + } + + const collectionUid = nanoid(); + const newCollection = { + uid: collectionUid, + base: null, + current: { + id: collectionUid, + name: values.collectionName, + items: [] + }, + requestSync: true + }; + + saveCollectionToIdb(store.idbConnection, newCollection) + .then(() => console.log('Collection created')) + .catch((err) => { + setShowToast({ + show: true, + type: 'error', + text: 'IndexedDB Error: Unable to save collection' + }); + }); }; return ( + {showToast.show && } {modalOpen ? ( { ) }; -export default Navbar; +export default TitleBar; diff --git a/renderer/providers/Store/idb.js b/renderer/providers/Store/idb.js index cfdd9f68b..1d13bbbe8 100644 --- a/renderer/providers/Store/idb.js +++ b/renderer/providers/Store/idb.js @@ -1,4 +1,4 @@ -export const saveCollectionToIdb = (connection, domain, collection) => { +export const saveCollectionToIdb = (connection, collection) => { return new Promise((resolve, reject) => { connection .then((db) => { diff --git a/renderer/providers/Store/reducer.js b/renderer/providers/Store/reducer.js index 353ef3fc9..1c9773a09 100644 --- a/renderer/providers/Store/reducer.js +++ b/renderer/providers/Store/reducer.js @@ -18,8 +18,6 @@ const reducer = (state, action) => { case actions.IDB_CONNECTION_READY: { return produce(state, (draft) => { draft.idbConnection = action.connection; - - console.log("here"); }); } diff --git a/renderer/providers/Store/useIdb.js b/renderer/providers/Store/useIdb.js index 690134add..951c3250d 100644 --- a/renderer/providers/Store/useIdb.js +++ b/renderer/providers/Store/useIdb.js @@ -9,7 +9,7 @@ const useIdb = (dispatch) => { upgrade(db, oldVersion, newVersion, transaction) { switch(oldVersion) { case 0: - const collectionStore = db.createObjectStore('collection', { keyPath: 'id' }); + const collectionStore = db.createObjectStore('collection', { keyPath: 'uid' }); collectionStore.createIndex('transactionIdIndex', 'transaction_id'); } }