Some cleanup

This commit is contained in:
Max Lynch
2020-12-30 23:01:42 -06:00
parent fc6110e820
commit f19a1d8ac0
8 changed files with 44 additions and 47 deletions
+3 -4
View File
@@ -52,7 +52,7 @@ const CurrentPage = ({ page, pageProps = {} }) => {
}; };
const AppShell = ({ page, pageProps }) => { const AppShell = ({ page, pageProps }) => {
const [location, setLocation] = useLocation(); const [location] = useLocation();
const showMenu = Store.useState(selectors.getMenuOpen); const showMenu = Store.useState(selectors.getMenuOpen);
const showNotifications = Store.useState(selectors.getNotificationsOpen); const showNotifications = Store.useState(selectors.getNotificationsOpen);
@@ -80,7 +80,7 @@ const AppShell = ({ page, pageProps }) => {
} }
); );
console.log('Got location', location, '/settings' === location); console.log('Got location', location);
// This is an example app layout. We've got a hidden menu that will be toggled // This is an example app layout. We've got a hidden menu that will be toggled
// //
@@ -97,7 +97,6 @@ const AppShell = ({ page, pageProps }) => {
<MenuContent /> <MenuContent />
</Menu> </Menu>
<Nav page={currentPage} /> <Nav page={currentPage} />
{/*<CurrentPage page={currentPage} />*/}
<CurrentPage page={page} pageProps={pageProps} /> <CurrentPage page={page} pageProps={pageProps} />
<TabBar> <TabBar>
<Tab <Tab
@@ -105,7 +104,7 @@ const AppShell = ({ page, pageProps }) => {
selectedIcon={home} selectedIcon={home}
title="Home" title="Home"
href="/" href="/"
selected={'/home' === location} selected={'/' === location}
/> />
<Tab <Tab
icon={listOutline} icon={listOutline}
+10 -8
View File
@@ -1,7 +1,6 @@
import { Link } from 'wouter'; import { Link } from 'wouter';
import usePage from '../../hooks/usePage'; import usePage from '../../hooks/usePage';
import { lists } from '../../mock';
import Store from '../../store'; import Store from '../../store';
import * as actions from '../../store/actions'; import * as actions from '../../store/actions';
import * as selectors from '../../store/selectors'; import * as selectors from '../../store/selectors';
@@ -41,14 +40,17 @@ const ListItemEntry = ({ list, item }) => (
</div> </div>
); );
const ListDetail = ({ selected, list, listId, params }) => { const ListDetail = ({ selected, listId, params }) => {
const selectedList = Store.useState(selectors.getSelectedList); const lists = Store.useState(selectors.getLists);
const actualListId = listId ? listId : params?.listId || null;
const loadedList = lists.find(l => l.id === actualListId);
const loadedList = list ? list : lists.find(l => l.id === params.listId); usePage(
{
usePage({ title: loadedList.name,
title: loadedList.title, },
}); [loadedList]
);
return ( return (
<Content className="p-4"> <Content className="p-4">
+24 -24
View File
@@ -1,5 +1,29 @@
import { useEffect, useRef, useState, useCallback } from 'react'; import { useEffect, useRef, useState, useCallback } from 'react';
// useEffect(() => {
// While History API does have `popstate` event, the only
// proper way to listen to changes via `push/replaceState`
// is to monkey-patch these methods.
//
// See https://stackoverflow.com/a/4585031
if (typeof history !== 'undefined') {
for (const type of [eventPushState, eventReplaceState]) {
const original = history[type];
history[type] = function () {
const result = original.apply(this, arguments);
const event = new Event(type);
event.arguments = arguments;
dispatchEvent(event);
return result;
};
}
} else {
console.log('No history API');
}
// });
/** /**
* History API docs @see https://developer.mozilla.org/en-US/docs/Web/API/History * History API docs @see https://developer.mozilla.org/en-US/docs/Web/API/History
*/ */
@@ -20,30 +44,6 @@ const useLocation = ({ base = '' } = {}) => {
const [path, update] = useState(() => getCurrentPathname(base)); // @see https://reactjs.org/docs/hooks-reference.html#lazy-initial-state const [path, update] = useState(() => getCurrentPathname(base)); // @see https://reactjs.org/docs/hooks-reference.html#lazy-initial-state
const prevPath = useRef(path); const prevPath = useRef(path);
useEffect(() => {
// While History API does have `popstate` event, the only
// proper way to listen to changes via `push/replaceState`
// is to monkey-patch these methods.
//
// See https://stackoverflow.com/a/4585031
if (typeof history !== 'undefined') {
for (const type of [eventPushState, eventReplaceState]) {
const original = history[type];
history[type] = function () {
const result = original.apply(this, arguments);
const event = new Event(type);
event.arguments = arguments;
dispatchEvent(event);
return result;
};
}
} else {
console.log('No history API');
}
});
useEffect(() => { useEffect(() => {
// this function checks if the location has been changed since the // this function checks if the location has been changed since the
// last render and updates the state only when needed. // last render and updates the state only when needed.
+3 -2
View File
@@ -1,12 +1,13 @@
import { useEffect } from 'react'; import { useEffect } from 'react';
import Store from '../store'; import Store from '../store';
const usePage = fields => { const usePage = (fields, deps) => {
useEffect(() => { useEffect(() => {
console.log('Deps updating', fields, deps);
Store.update(s => { Store.update(s => {
s.currentPage = fields; s.currentPage = fields;
}); });
}, [fields]); }, [fields, deps]);
}; };
export default usePage; export default usePage;
+3 -7
View File
@@ -1,9 +1,8 @@
import AppShell from '../../components/AppShell'; import AppShell from '../../components/AppShell';
import ListDetailPage from '../../components/pages/ListDetail'; import ListDetailPage from '../../components/pages/ListDetail';
import { lists } from '../../mock';
export default function ListDetail({ list }) { export default function ListDetail({ listId }) {
return <AppShell page={ListDetailPage} pageProps={{ list }} />; return <AppShell page={ListDetailPage} pageProps={{ listId }} />;
} }
export const getServerSideProps = context => { export const getServerSideProps = context => {
@@ -11,12 +10,9 @@ export const getServerSideProps = context => {
params: { listId }, params: { listId },
} = context; } = context;
const list = lists.find(l => l.id === listId);
console.log('Loaded list', list);
return { return {
props: { props: {
list, listId,
}, },
}; };
}; };
+1
View File
@@ -23,6 +23,7 @@ export const setSettings = settings => {
export const setDone = (list, item, done) => { export const setDone = (list, item, done) => {
Store.update((s, o) => { Store.update((s, o) => {
const listIndex = o.lists.findIndex(l => l === list); const listIndex = o.lists.findIndex(l => l === list);
console.log('Setting done', list, item, done, o.lists, listIndex);
const itemIndex = o.lists[listIndex].items.findIndex(i => i === item); const itemIndex = o.lists[listIndex].items.findIndex(i => i === item);
s.lists[listIndex].items[itemIndex].done = done; s.lists[listIndex].items[itemIndex].done = done;
if (list === o.selectedList) { if (list === o.selectedList) {
-1
View File
@@ -49,7 +49,6 @@ const Store = new PullStateStore({
currentPage: null, currentPage: null,
homeItems, homeItems,
lists, lists,
selectedList: null,
settings: { settings: {
enableNotifications: true, enableNotifications: true,
}, },
-1
View File
@@ -9,5 +9,4 @@ export const getCurrentPage = createSelector(getState, state => state.currentPag
// App specific selectors // App specific selectors
export const getHomeItems = createSelector(getState, state => state.homeItems); export const getHomeItems = createSelector(getState, state => state.homeItems);
export const getLists = createSelector(getState, state => state.lists); export const getLists = createSelector(getState, state => state.lists);
export const getSelectedList = createSelector(getState, state => state.selectedList);
export const getSettings = createSelector(getState, state => state.settings); export const getSettings = createSelector(getState, state => state.settings);